1、在启动apache时,出现如下警告: D!a5#+\C
PHP Warning: PHP Startup: in Unknown on line 0 6QXQ<ah"
kO_XyC4(
没有其他信息了。 ;nKHm
UX`DZb+^
虽然暂时没有发现有什么影响,但是还是觉得不爽,要处理掉,先怀疑是扩展程序无法加载,一个个注释打开、启动,终于找到是加载php_curl.dll的问题。 gQ=POJ=G
^;$a_$|
解决办法是: KzX
,n_`an
xY'qm8V
把php根目录下的libeay32.dll、ssleay32.dll copy to C:\WINDOWS\system32; (对于加载到IIS Isap情况?) O+p-1 C$\
j8Q5d`
重新启动apache,没有警告了。 aXbNDj
][
04guud }
20l_ay
Wx?&igh
2、如果安装的是包含ssl的版本,需要加载 >mFX^t_,
P"9@8aLB
LoadModule authz_core_module modules/mod_authz_core.so +*_fN ]M
否则访问就会出现 ,t%CK!8
EARfbb"SG7
如下错误日记 1rv$?=Z
S@c\|
[mpm_winnt:notice] [pid 11332:tid 340] AH00354: Child: Starting 64 worker threads. O+o ;aa6
X"k^89y$
3.1、网络名不再可用错误解决方法 s`#ntset0
DhWWN>I
在httpd.conf里找到#EnableMMAP Off(禁用内存映射) }2Cd1RnS
,TF<y#wed
#EnableSendfile Off修改成:EnableMMAP OffEnableSendfile OffAcceptFilter http noneAcceptFilter https none Sf'i{xye
X:G&5
2 dd\bI_
“Win32DisableAcceptEx”指令(For 2.2,2.4无效): Ii~; d3.
#)_J)/h
AcceptEx()是微软的WinSock2 API ,通过使用BSD的accept() API 提供性能的改善。很多Windows软件会干扰AcceptEx()操作。 C~ZE95g
UsLh)#}h
当遇到像下面的错误:[error] (730038)An operation was attempted on something that is not a socket.: winnt_accept: AcceptEx failed. Attempting to recover. BgJkrv7~
oMh~5
W
就需要使用这一个指令禁止使用AcceptEx() 。 Zk]k1]u*5
hz<|W5
关闭AcceptEx() 的同时也随着关闭了EnableMMAP和 EnableSendfile. @Pxw hlxa
!Z
U_,[
3 ,dHP`j ?
在Linux服务器上启用IPv6的时候,使用sendfile会触发网卡上的TCP校验和卸载的bug。当Linux运行在Itanium处理器上时,sendfile将无法处理2GB以上的文件。对于通过网络挂载NFS文件系统的DocumentRoot,内核将无法通过缓冲区服务到网络文件。当出现以上情况的时候,应该禁用sendfile:EnableSendfile Off针对NFS或SMB,这个指令可以被针对目录的设置覆盖:EnableSendfile Off lq1[r~
PqT"jOF]n
还是关闭这两个指令比较好一些。 + jp|Y?6Z
8W-]t1O%!
END TkA9tFi
注意事项 R `;o!B}[
故障[warn] (OS 64)指定的网络名不再可用的解决办法主要是关闭AcceptEx对于另外两个指令可选则关闭。 ,q8(]n4
q^u1z|'Z
hgj CXl
3.2、Windows2003下换了Apache 2.2.8之后,发现访问网站特别慢且时断时续 0;vtdM[_
q1UBKhpnH
在error日志中发现以下记录: /M 0 p_4
M6\7FP6G
[Sat Dec 24 17:21:28 2008] [warn] (OS 64)指定的网络名不再可用。 : winnt_accept: Asynchronous AcceptEx failed. DX|uHbGg
'w}p[(
NzAQ@E2d:
---- Pass Test OK, Follow other idea is pool----- m+H% g"Zj
hPcS,
p{%
EnableMMAP off mLJDxh'B
EnableSendfile off 7 xUE,)?
&uPDZ#C-
解决办法: rrAqI$6
在httpd.conf文件中启用如下扩展 R+s1[Z
# Server-pool management (MPM specific) ~,T+JX
Include conf/extra/httpd-mpm.conf vuZf#\zh}
~*,Wj?~+7
然后在httpd-mpm.conf中添加 Win32DisableAcceptEx 标记,如下: yu=piP
# WinNT MPM 5.dl>,
# ThreadsPerChild: constant number of worker threads in the server process Z&A0hI4d
# MaxRequestsPerChild: maximum number of requests a server process serves :Z[(A"dA
5\&]J7(
Win32DisableAcceptEx (For 2.2,2.4无效) T RDxT
ThreadsPerChild 150 L$SMfx
MaxRequestsPerChild 0 "ct58Y@
# v+;:
重启Apache。 lM$t!2pRB
cN5"i0xk
bf(+ldq
@gEr+O1K(
3.3、Apache日志中:[warn] (OS 64)指定的网络名不再可用。 : winnt_accept: Asynchronous AcceptEx failed. n_}aZB3;U
-zdmr"CA
在apache配置文件中添加如下语句: c@9##DPn
? #n#HzbT
<IfModule mpm_winnt.c> ZL,8,;]
ThreadsPerChild 1000 y]
y9'5_
MaxRequestsPerChild 10000 6uqUiRs()
Win32DisableAcceptEx (For 2.2,2.4无效) {m'AY)
</IfModule> e,"FnW
停止Apache,再启动。 E<k^S{
S eOy7
#2N_/J(U
3.4、参数注释 _@K YF)
3daC;;XO
一般来说,WinNT系统下使用IIS,而Apache在Linux下应用的比较多,但是依然有很多人在WinNT系统下使用Apache而非IIS,可能是基于对Windows系统的熟悉吧。今天就来说一下在Windows系统下如果优化Apache的性能。 %I0}4$
1yS&~
y?a
mpm_winnt.c 是专门针对Windows NT优化的MPM(多路处理模块),它使用一个单独的父进程产生一个单独的子进程,在这个子进程中轮流产生多个线程来处理请求。也就是说 mpm_winnt只能启动父子两个进程, 不能像Linux下那样同时启动多个进程。 t#~XLCE
V:>`*tlh
87}(AO)
mpm_winnt主要通过ThreadsPerChild和MaxRequestsPerChild两个参数来优化Apache,下面详细来说明一下。 lQ$+JX;n(y
}lO
}x
ThreadsPerChild ?;RD u[eD
E-F5y
ckWkZ
78\
这个参数用于设置每个进程的线程数, 子进程在启动时建立这些线程后就不再建立新的线程了. 一方面因为mpm_winnt不能启动多个进程, 所以这个数值要足够大,以便可以处理可能的请求高峰; 另一方面该参数以服务器的响应速度为准的, 数目太大的反而会变慢。因此需要综合均衡一个合理的数值。 ;W~4L+e
AK;^9b-}q:
mpm_winnt上的默认值是64, 最大值是1920. 这里建议设置为100-500之间,服务器性能高的话值大一些,反之值小一些。