httpd.exe进程占用cpu%100,关闭掉AppServ服务,cpu应用率立刻下降到0。
L+@X]OW8 重新启动AppServ又出现占用cpu高的情况。
DC BN89# 原因,httpd.exe和防火墙配置有冲突。
?X\.O-=4X 解决方法如下:
H*f2fyC1\ 1.网上邻居->本地链接->属性->internet协议(TCP/IP)->属性->高级->wins标签->去掉起用LMhosts查询前的勾。
kv?DE4=; 2.控制面版->windows防火墙->高级标签->本地链接设置->服务的标签里勾选安全Web服务器(HTTPS)即可。
JqYa~6 C 另外在网上有另外一种解决办法。
2_M+o]Z^ 找到httpd.conf配置文件
Y2dml!QM 修改ThreadsPerChild 的值为150 默认是250 万一你的服务器或vps内存超过2G 那么就不用设置
>mEfd=p 经过修改防火墙设置http.exe占用cpu100%的问题解决!
bt.3#aj # worker MPM
<X& fs*x& # ThreadLimit: maximum setting of ThreadsPerChild
5U]@
Y? # ServerLimit: maximum setting of StartServers
WT1y7+_g(d # StartServers: initial number of server processes to start
anfnqa8 # MaxClients: maximum number of simultaneous client connections
9!Xp+< # MinspareThreads: minimum number of worker threads which are kept spare
}ALli0n`V) # MaxspareThreads: maximum number of worker threads which are kept spare
+$2`"%nBG # ThreadsPerChild: constant number of worker threads in each server process
hJk:&!M=T # MaxRequestsPerChild: maximum number of requests a server process serves
-XwS?*O ThreadLimit 125
B8.}9 ServerLimit 320
zzW$F)X StartServers 5
Z ZCm438 MaxClients 8000
Acd@BL* MinspareThreads 125
+qT+iHa|n MaxspareThreads 1250
oK4xRv8Hd ThreadsPerChild 125
fH:S_7i MaxRequestsPerChild 1000
|R!ozlL{} y*US^HJOZ 其中最重要的参数是 ThreadsPerChild和 MaxClients:
Yw5-:w0f ##ThreadsPerChild 每个子进程建立的线程数,子进程在启动时建立这些线程后就不再建立新的线程了
I'p+9H$ ##MaxClients 允许同时伺服的最大接入请求数量(在worker下就是最大线程数量)
R(cg`8 ##ServerLimit:对最大子进程数的上限,该值必须大于等于MaxClients/ThreadsPerChild
e+4Eiv ##ThreadLimit:对ThreadsPerChild的上限,该值必须大于等于 ThreadsPerChild,如果将ThreadLimit设置成一个高出实际需要很多的ThreadsPerChild值,将会有过多的共享内存被 分配,应当和ThreadsPerChild可能达到的最大值保持一致.
k#8`996P ##StartServers:服务器启动时的服务进程数目,该值肯定小于等于ServerLimit
3?L[ohKH?: ##MinspareThreads和MaxspareThreads:通过新建或结束子进程的方式,将空闲线程的总数维持在这个范围内
nLv~)IQ}: ##MaxRequestsPerChild:用于控制服务器建立新进程和结束旧进程的频 率,其实是一个为了防止内存溢出的参数,每个子进程在其生存期内允许伺服的最大请求数量。到达MaxRequestsPerChild的限制后,子进程将 会结束。对于KeepAlive链接,只有第一个请求会被计数。事实上,它改变了每个子进程限制最大链接数量的行为。
n4}e!
可以通过检查HTTPServer/logs/error_log日志,判断MaxClients是否需要增加,如果有下面的报错,就说明apache自上次重启至今,曾经发生过达到MaxClients的情况:
t+]1D@h v Tue Jun 07 16:36:03 2011] [error] server reached MaxClients setting, consider raising the MaxClients setting
C8|# 需要注意的是,这样的报错并不会出现多次,当第二次达到MaxClients时,error_log不会记录。
niW"o-} 还有一种可以实时看到连接数的方法,就是打开 server-status页面,设置方法如下:
)& Oxp&x 1. 去掉以下部分的注释
c=9A d LoadModule status_module modules/mod_status.so
U?5lqq ExtendedStatus On
.cw)Y#;IG S?C.: 2.修改以下部分
6-)WXJ@V SetHandler server-status
<p/2 hHfiD # Order deny,allow
lcjOBu # Deny from all
m.1-[ 2{8~ Allow from all
g;6/P2w #=33TvprR2 重启ihs
H^@Hco>| 使用:
http://yourhost/server-status 可以进入监控页面
/4c`[ 如果浏览器支持刷新,可以
http://your_host/server-status?refresh=5 以便每 5 秒钟刷新一次
-o`K/f}d 在打开的监控页面中:”.” Open slot with no current process,这里面的单个进程的“.”的数量其实对应与ThreadLimit这个值。
KF1iYo>p ThreadLimit 10
?b{y#du2a ServerLimit 2
cRD;a?0/6s StartServers 1
\ERxr
MaxClients 2
Y;huTZ MinspareThreads 1
K\XQE50 MaxspareThreads 2
^L)3O|6c ThreadsPerChild 1
p5vQ.Ni*\- MaxRequestsPerChild 1
N|2d9E n_RZ:<Gr httpd.conf的MPM配置如上例,在监控页面中的输出如下,其中有2个进程,各10个ThreadLimit,但由于ThreadsPerChild的限制,其实很多.是没有用的。