• 3143阅读
  • 1回复

APACHE服务器httpd.exe进程占用cpu100%的解决方法

楼层直达
httpd.exe进程占用cpu%100,关闭掉AppServ服务,cpu应用率立刻下降到0。 B&@?*^.  
  重新启动AppServ又出现占用cpu高的情况。 ~m$Y$,uH  
  原因,httpd.exe和防火墙配置有冲突。 ypy68_xyW  
  解决方法如下: %T~ig[GstX  
  1.网上邻居->本地链接->属性->internet协议(TCP/IP)->属性->高级->wins标签->去掉起用LMhosts查询前的勾。 } q$ WvY/  
  2.控制面版->windows防火墙->高级标签->本地链接设置->服务的标签里勾选安全Web服务器(HTTPS)即可。 GSRVe/ [  
  另外在网上有另外一种解决办法。 ,]d,-)KX8  
  找到httpd.conf配置文件 >M`CVUf  
  修改ThreadsPerChild 的值为150 默认是250 万一你的服务器或vps内存超过2G 那么就不用设置 ihfiK|a  
  经过修改防火墙设置http.exe占用cpu100%的问题解决! gy_>`16K  
# worker MPM |g//g\dd  
# ThreadLimit: maximum setting of ThreadsPerChild *#C+iAF|)'  
# ServerLimit: maximum setting of StartServers h"/< ?3{  
# StartServers: initial number of server processes to start @9lUSk^9  
# MaxClients: maximum number of simultaneous client connections 7BJzM lJ1Y  
# MinspareThreads: minimum number of worker threads which are kept spare }3OKC2K~  
# MaxspareThreads: maximum number of worker threads which are kept spare ;u>DNG|.  
# ThreadsPerChild: constant number of worker threads in each server process 1fZ(l"  
# MaxRequestsPerChild: maximum number of requests a server process serves Mw;sLsu  
ThreadLimit 125 %*L:sTj(  
ServerLimit 320 dF2nEaN0%  
StartServers 5 :>Ay^{vf=  
MaxClients 8000 n\^Tq<] a  
MinspareThreads 125 R wZ]),o  
MaxspareThreads 1250 pP*a  
ThreadsPerChild 125 'LO^<  
MaxRequestsPerChild 1000 `wDl<[V  
HBu[gh;b  
其中最重要的参数是 ThreadsPerChild和 MaxClients: YJJB.hR+  
##ThreadsPerChild 每个子进程建立的线程数,子进程在启动时建立这些线程后就不再建立新的线程了 yrC7F` .  
##MaxClients 允许同时伺服的最大接入请求数量(在worker下就是最大线程数量) TX&Jt%  
##ServerLimit:对最大子进程数的上限,该值必须大于等于MaxClients/ThreadsPerChild M!REygyx  
##ThreadLimit:对ThreadsPerChild的上限,该值必须大于等于 ThreadsPerChild,如果将ThreadLimit设置成一个高出实际需要很多的ThreadsPerChild值,将会有过多的共享内存被 分配,应当和ThreadsPerChild可能达到的最大值保持一致. K>DR Jz  
##StartServers:服务器启动时的服务进程数目,该值肯定小于等于ServerLimit &L,nqc\3D5  
##MinspareThreads和MaxspareThreads:通过新建或结束子进程的方式,将空闲线程的总数维持在这个范围内 t+1 %RyKFB  
##MaxRequestsPerChild:用于控制服务器建立新进程和结束旧进程的频 率,其实是一个为了防止内存溢出的参数,每个子进程在其生存期内允许伺服的最大请求数量。到达MaxRequestsPerChild的限制后,子进程将 会结束。对于KeepAlive链接,只有第一个请求会被计数。事实上,它改变了每个子进程限制最大链接数量的行为。 Jc|6&  
可以通过检查HTTPServer/logs/error_log日志,判断MaxClients是否需要增加,如果有下面的报错,就说明apache自上次重启至今,曾经发生过达到MaxClients的情况: 8j=}u/T@F  
Tue Jun 07 16:36:03 2011] [error] server reached MaxClients setting, consider raising the MaxClients setting |4uWh  
需要注意的是,这样的报错并不会出现多次,当第二次达到MaxClients时,error_log不会记录。 hKT  
还有一种可以实时看到连接数的方法,就是打开 server-status页面,设置方法如下: 4DL)rkO  
1. 去掉以下部分的注释 SU/BQ3  
LoadModule status_module modules/mod_status.so 5sx1Zq7  
ExtendedStatus On 5yzv|mrx  
a{qM2P(S  
2.修改以下部分 g!+| I  
SetHandler server-status /#VhkC _  
# Order deny,allow }}>q2y  
# Deny from all q(2K6  
Allow from all I~Zh@d%  
5`gQ~   
重启ihs ZRg;/sX]  
使用:http://yourhost/server-status 可以进入监控页面 5[YDZ7g"~  
如果浏览器支持刷新,可以http://your_host/server-status?refresh=5 以便每 5 秒钟刷新一次 6u7?dG'4  
在打开的监控页面中:”.” Open slot with no current process,这里面的单个进程的“.”的数量其实对应与ThreadLimit这个值。 H=Y{rq@  
ThreadLimit 10 4bw4cqY;  
ServerLimit 2 ,kF}lo)  
StartServers 1 |(q9"  
MaxClients 2 BC&9fr  
MinspareThreads 1 +L9Eqll  
MaxspareThreads 2  s8rE$  
ThreadsPerChild 1 j&Wl0  
MaxRequestsPerChild 1 Ju :CMkv  
:kf`?u  
httpd.conf的MPM配置如上例,在监控页面中的输出如下,其中有2个进程,各10个ThreadLimit,但由于ThreadsPerChild的限制,其实很多.是没有用的。
只看该作者 安逸沙发  发表于: 2014-08-02
所谓Apache出现CPU高占用率就是指Apache在一段时间内持续占用很高的CPU使用率,甚至达到CPU100%,这个时候造成网站无法访问。解决的方法就是仔细观察Apache的日志文件,查阅错误的信息。 %cG6=`vR  
下面我们针对几种错误信息进行分析并给出解决的方法: >FPE%X0+  
1. Apache与WinSock v2相冲突 I_.(&hMn  
Apache官方提供的手册中提到,在Windows系统下Apache2.x为了提高性能而使用了Microsoft WinSock v2 API,但是一些常见的防火墙软件会破坏他的正确性,从而使得Apache出现死循环操作造成CPU100%。 !%J;dOcU  
其错误提示如下所示: YIb5jK `  
[error] (730038)An operation was attempted _disibledevent=>  =IV_yor  
这个错误是Apache的一个bug(#11997),可以通过 Win32DisableAcceptEx 禁止Apache使用WinSocket v2来避免此bug,具体设置见前述。 q a#Fa)g*  
4. PHP5.2.1以上版本的libmysql.dll与MySQL5不兼容 OQaM47"  
PHP5.2.1以后的新版本(截止目前最新版本为5.2.5)中用于连接MySQL的libmysql.dll组件与MySQL5不兼容,在Apache中运行PHP的时候会造成Apache产生CPU100%的问题。 wl2rw93  
解决的方法就是从http://www.php.net/releases/下载5.2.1版本,将压缩包中的libmysql.dll文件覆盖现在的文件,然后重启Apache就可以了。 r<V]MwO=  
5. 病毒或木马程序命名为Apache.exe x*}j$n(Oa  
有的时候病毒或木马程序会将其名称命名为Apache.exe文件达到一种掩饰的目的,这个时候使用第三方进程分析器查看进程的路径然后将其删除或使用杀毒软件清除就可以了。 xc Wr hg  
6. 程序编写不严谨造成死循环等错误 W?~G_4  
如果上面的问题都不存在Apache依然产生CPU100%的问题的话,通常来说就应该是Web程序自身的问题了,例如死循环等等。这个时候需要在日志中设置HTTP请求的文件及执行的时间,然后查找出执行时间比较长的地址进行分析排查。 Tn2Z{.q$  
日志格式设置如下: 4>>{}c!nf  
LogFormat “%v %h %l %u %t [%Ts] \”%r\” %>s %b” vhost_common #设置程序执行时间 UBqA[9  
<VirtualHost xxx.xxx.xx.xx:80> rZ 9bz}K  
ServerName xxx.xxx.com [VIdw 92  
DirectoryIndex index.php index.html index.htm *XS@Ku  
DocumentRoot “xxx” '?t]iRCeI7  
# cronolog.exe是Apache自带的用于将日志文件进行分割的应用程序 'VFxg,  
CustomLog “|bin/cronolog.exe e:/%Y%m%d.log” vhost_common  dKDtj:  
</VirtualHost>
快速回复

限100 字节
安逸网提示:如果您提交过一次失败了,可以用”恢复数据”来恢复帖子内容
 
认证码:
上一个 下一个