1、在启动apache时,出现如下警告: qwcD`HV,
PHP Warning: PHP Startup: in Unknown on line 0 aK~8B_5k8
;1=1:S8
没有其他信息了。 {WS;dX4
c#]4awHU
虽然暂时没有发现有什么影响,但是还是觉得不爽,要处理掉,先怀疑是扩展程序无法加载,一个个注释打开、启动,终于找到是加载php_curl.dll的问题。 7z,C}-q
!F-w3
]
解决办法是: aO[w/cGQ
]5cT cX;Z#
把php根目录下的libeay32.dll、ssleay32.dll copy to C:\WINDOWS\system32; (对于加载到IIS Isap情况?) $wa{~'
^DLfY-F+j
重新启动apache,没有警告了。 $HzBD.CF|x
?$pCsBDo
Ix}sK"}[n
G_JA-@i%
2、如果安装的是包含ssl的版本,需要加载 (WJRi:NP?
djZqc5t
LoadModule authz_core_module modules/mod_authz_core.so :-Z2:/P
否则访问就会出现 F(n$
[|L<_.8
如下错误日记 j (d~aqW
& .j&0WE
[mpm_winnt:notice] [pid 11332:tid 340] AH00354: Child: Starting 64 worker threads. EZGIf/ 3
e*C(q~PQ
3.1、网络名不再可用错误解决方法 A)!*]o>U
"S]TP$O D
在httpd.conf里找到#EnableMMAP Off(禁用内存映射) BWrxunHO
tNI^@xdim1
#EnableSendfile Off修改成:EnableMMAP OffEnableSendfile OffAcceptFilter http noneAcceptFilter https none m(!FHPvN
+6\Zj)
2 \b x$i*
“Win32DisableAcceptEx”指令(For 2.2,2.4无效): FZlWsp=
t~XN}gMxw
AcceptEx()是微软的WinSock2 API ,通过使用BSD的accept() API 提供性能的改善。很多Windows软件会干扰AcceptEx()操作。 o*H<KaX
`;C V=,M
当遇到像下面的错误:[error] (730038)An operation was attempted on something that is not a socket.: winnt_accept: AcceptEx failed. Attempting to recover. =,M5KDk`
:F?C)F
就需要使用这一个指令禁止使用AcceptEx() 。 ga +dt
!|(NgzDP/
关闭AcceptEx() 的同时也随着关闭了EnableMMAP和 EnableSendfile. g-
gV2$I
O0.*Pmt
3 g7H(PF?
在Linux服务器上启用IPv6的时候,使用sendfile会触发网卡上的TCP校验和卸载的bug。当Linux运行在Itanium处理器上时,sendfile将无法处理2GB以上的文件。对于通过网络挂载NFS文件系统的DocumentRoot,内核将无法通过缓冲区服务到网络文件。当出现以上情况的时候,应该禁用sendfile:EnableSendfile Off针对NFS或SMB,这个指令可以被针对目录的设置覆盖:EnableSendfile Off (LCfUI6;
AwR=]W;j
还是关闭这两个指令比较好一些。 F^:3?JA_
l/5
hp.
END _[BP0\dPW
注意事项 :2`e(+Uz
故障[warn] (OS 64)指定的网络名不再可用的解决办法主要是关闭AcceptEx对于另外两个指令可选则关闭。 >t+P(*u
;uGv:$([g
$`8wJf9@w
3.2、Windows2003下换了Apache 2.2.8之后,发现访问网站特别慢且时断时续 h(DTa
5^ Zg>I
在error日志中发现以下记录: [}m[ )L\
V;=cwy)I
[Sat Dec 24 17:21:28 2008] [warn] (OS 64)指定的网络名不再可用。 : winnt_accept: Asynchronous AcceptEx failed. EU#^7
6S#Cl>v
M6TD"-
---- Pass Test OK, Follow other idea is pool----- LzL
So"n
i.#:zU%o
EnableMMAP off y();tsWqc
EnableSendfile off ]M3yLYK/P
MQ2_`pi
解决办法: X8\GzNE~R
在httpd.conf文件中启用如下扩展 xSu >
# Server-pool management (MPM specific) wIgS3K
Include conf/extra/httpd-mpm.conf -\MG}5?!
v[<T]1=LRC
然后在httpd-mpm.conf中添加 Win32DisableAcceptEx 标记,如下: dN6?c'iN?2
# WinNT MPM '"Nr, vQo
# ThreadsPerChild: constant number of worker threads in the server process PY'2h4IL
# MaxRequestsPerChild: maximum number of requests a server process serves Y-9I3?ar
TqQ[_RKg2
Win32DisableAcceptEx (For 2.2,2.4无效) 76SXJ9@x
ThreadsPerChild 150 V[V[~;Py
MaxRequestsPerChild 0 N>E_%]C h
,: ^u-b|
重启Apache。 iDD$pd,e\
#K&Gp-
(?];VG
bK7J} 8hH
3.3、Apache日志中:[warn] (OS 64)指定的网络名不再可用。 : winnt_accept: Asynchronous AcceptEx failed. )PZT4jTt
r|Z{-*`
在apache配置文件中添加如下语句: "jCu6Rj d
? [B3RfCV{
<IfModule mpm_winnt.c> 13f)&#, F
ThreadsPerChild 1000 lx i<F
MaxRequestsPerChild 10000 :KO2| v\
Win32DisableAcceptEx (For 2.2,2.4无效) !9x}
</IfModule> 2SLU:=<3
停止Apache,再启动。 >dT*rH 3w
pk~WrqK}
adw2x pj
3.4、参数注释 Hv, LS;W
0IpmRH/
一般来说,WinNT系统下使用IIS,而Apache在Linux下应用的比较多,但是依然有很多人在WinNT系统下使用Apache而非IIS,可能是基于对Windows系统的熟悉吧。今天就来说一下在Windows系统下如果优化Apache的性能。 #;<Y[hR{P
I_BJH'!t
mpm_winnt.c 是专门针对Windows NT优化的MPM(多路处理模块),它使用一个单独的父进程产生一个单独的子进程,在这个子进程中轮流产生多个线程来处理请求。也就是说 mpm_winnt只能启动父子两个进程, 不能像Linux下那样同时启动多个进程。 E'8;10s
;G!q Y
%$mA03[MQ
mpm_winnt主要通过ThreadsPerChild和MaxRequestsPerChild两个参数来优化Apache,下面详细来说明一下。 =Sv/IXX\di
/(LL3cZK
ThreadsPerChild Z]ONh
g+lCMW\
BuwY3F\-O
这个参数用于设置每个进程的线程数, 子进程在启动时建立这些线程后就不再建立新的线程了. 一方面因为mpm_winnt不能启动多个进程, 所以这个数值要足够大,以便可以处理可能的请求高峰; 另一方面该参数以服务器的响应速度为准的, 数目太大的反而会变慢。因此需要综合均衡一个合理的数值。 `2snz1>!j
n| ;Im&,
mpm_winnt上的默认值是64, 最大值是1920. 这里建议设置为100-500之间,服务器性能高的话值大一些,反之值小一些。