• 3147阅读
  • 1回复

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

楼层直达
httpd.exe进程占用cpu%100,关闭掉AppServ服务,cpu应用率立刻下降到0。 L+@X]O W8  
  重新启动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 -Xw S?*O  
ThreadLimit 125 B8.}9  
ServerLimit 320 zzW$F)X  
StartServers 5 ZZCm438  
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@hv  
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/2hHfiD  
# 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\XQ E50  
MaxspareThreads 2 ^L)3O|6c  
ThreadsPerChild 1 p5vQ.Ni*\-  
MaxRequestsPerChild 1 N|2d9E  
n_RZ:<Gr  
httpd.conf的MPM配置如上例,在监控页面中的输出如下,其中有2个进程,各10个ThreadLimit,但由于ThreadsPerChild的限制,其实很多.是没有用的。
只看该作者 安逸沙发  发表于: 2014-08-02
所谓Apache出现CPU高占用率就是指Apache在一段时间内持续占用很高的CPU使用率,甚至达到CPU100%,这个时候造成网站无法访问。解决的方法就是仔细观察Apache的日志文件,查阅错误的信息。 "V~U{(Z  
下面我们针对几种错误信息进行分析并给出解决的方法:  &N0W!  
1. Apache与WinSock v2相冲突 ",E6)r  
Apache官方提供的手册中提到,在Windows系统下Apache2.x为了提高性能而使用了Microsoft WinSock v2 API,但是一些常见的防火墙软件会破坏他的正确性,从而使得Apache出现死循环操作造成CPU100%。 OW)8Z 60  
其错误提示如下所示: rd]HoFE  
[error] (730038)An operation was attempted _disibledevent=> [HF)d#A  
这个错误是Apache的一个bug(#11997),可以通过 Win32DisableAcceptEx 禁止Apache使用WinSocket v2来避免此bug,具体设置见前述。 mfG|K@ODM-  
4. PHP5.2.1以上版本的libmysql.dll与MySQL5不兼容 wX#\\Jgi  
PHP5.2.1以后的新版本(截止目前最新版本为5.2.5)中用于连接MySQL的libmysql.dll组件与MySQL5不兼容,在Apache中运行PHP的时候会造成Apache产生CPU100%的问题。 4}580mBc  
解决的方法就是从http://www.php.net/releases/下载5.2.1版本,将压缩包中的libmysql.dll文件覆盖现在的文件,然后重启Apache就可以了。 ZeWHSU  
5. 病毒或木马程序命名为Apache.exe G2a fHL<  
有的时候病毒或木马程序会将其名称命名为Apache.exe文件达到一种掩饰的目的,这个时候使用第三方进程分析器查看进程的路径然后将其删除或使用杀毒软件清除就可以了。 :KX/`   
6. 程序编写不严谨造成死循环等错误 Btpx[T  
如果上面的问题都不存在Apache依然产生CPU100%的问题的话,通常来说就应该是Web程序自身的问题了,例如死循环等等。这个时候需要在日志中设置HTTP请求的文件及执行的时间,然后查找出执行时间比较长的地址进行分析排查。 U{>!`RN  
日志格式设置如下: 4 CX*,7LZ  
LogFormat “%v %h %l %u %t [%Ts] \”%r\” %>s %b” vhost_common #设置程序执行时间 @GnsW;$*~.  
<VirtualHost xxx.xxx.xx.xx:80> 42z9N\ f  
ServerName xxx.xxx.com y H+CyL\  
DirectoryIndex index.php index.html index.htm 5R"b1  
DocumentRoot “xxx” ^~BJu#uVyy  
# cronolog.exe是Apache自带的用于将日志文件进行分割的应用程序 Pv1psKu  
CustomLog “|bin/cronolog.exe e:/%Y%m%d.log” vhost_common r`<e vwIe  
</VirtualHost>
快速回复

限100 字节
安逸网提示:如果您在写长篇帖子又不马上发表,建议存为草稿
 
认证码:
上一个 下一个