httpd.exe占用100%CPU

客户VPShttpd.exe进程占用100%CPU百度搜了下,很多文章:

在网上也没有能够直接找到比较好的解决方法,后来在一个帖子上看到说,有可能是apache与其他的软件冲突了(参考http://topic.csdn.net/u/20080331/14/9a86ed60-285e-49b9-a11c-f42810dc64a5.html的35楼)。如果是冲突,他会一直写在apache/logs/ 目录下的 error.log  错误日志。结果结果我看到我的error.log文件已经达到将近700M的大小,而且在开着apache的时候还在不断增大。看到里面的错误是“(OS 10038)在一个非套接字上尝试了一个操作。  : Child 8164: Encountered too many errors accepting client connections. Possible causes: dynamic address renewal, or incompatible VPN or firewall software. Try using the Win32DisableAcceptEx directive.”最后终于在网上找到了相应的解决方法(参考http://www.cnblogs.com/mr-jhao/articles/2240699.html)

(1)编辑httpd.conf

Win32DisableAcceptEx ##加入这行
ThreadsPerChild 
250
MaxRequestsPerChild 
0

重启apache就解决了。

修改后还是不行,任然有错误记录,CPU占用率是降低了,但是还是没有恢复到原来的状态.logs里面还是一直在记录下面的错误报告。

(2)在win命令行cmd下,输入以下命令

netsh winsock reset 

        原因与winsock有关,这里主要是因为金山毒霸或者升级精灵修改了WINSOCK导致的。由于我电脑上也安装了金山毒霸,而且最近几天也升级过了,应该是同样的问题。

使用此条命令恢复后,重启电脑,这下Apache恢复当原先的良好状态了。


---------------------------------------------------------------------------------------

        对于上面加入httpd.conf中内容的解释参考http://topic.csdn.net/u/20080331/14/9a86ed60-285e-49b9-a11c-f42810dc64a5.html的5楼的回答

        通常在“Windows任务管理器-进程”中可以看到两个httpd.exe进程,一个是父进程、一个是子进程,父进程接到访问请求后,将请求交由子进程处理。
        MaxRequestsPerChild这个指令设定一个独立的子进程将能处理的请求数量。在处理“MaxRequestsPerChild 数字”个请求之后,子进程将会被父进程终止,这时候子进程占用的内存就会释放,如果再有访问请求,父进程会重新产生子进程进行处理。
       如果MaxRequestsPerChild缺省设为0(无限)或较大的数字(例如10000以上)可以使每个子进程处理更多的请求,不会因为不断终止、启动子进程降低访问效率,但MaxRequestsPerChild设置为0时,如果占用了200~300M内存,即使负载下来时占用的内存也不会减少。内存较大的服务器可以设置为0或较大的数字。内存较小的服务器不妨设置成30、50、100,以防内存溢出。

 

問題:Apache 的httpd.exe進程CPU使用率50%, 無法運行PHP,甚至HTML也無法訪問!

解決辦法一:

可能是安裝了某些程序修改了Winsock,使用netsh winsock reset 命令修複Winsock重啓計算機即可!
(我是用方法一解決了httpd.exe進程超高,PHP頁面打不開問題)

解決辦法二:

在httpd.conf文件中添加 Win32DisableAcceptEx 標記,如下:

<IfModule mpm_winnt.c>
ThreadsPerChild 1000
MaxRequestsPerChild 10000
Win32DisableAcceptEx
</IfModule>

解決辦法三:

1、網上鄰居->本地連接->屬性->internet協議(TCP/IP)->屬性->高級->wins標簽->去掉啓用LMhosts查詢前的勾. 2、控制面版->windows防火牆->高級標簽->本地連接設置->服務的標簽裏勾選安全Web服務器(HTTPS)。
3、然後重啓Apache

三種辦法可能有些不能解決問題,所以可以壹個壹個試

————————————————————————————————————————————————————————

我终于找到原因了
早的时候 我发现新装的系统和配置环境 所以排除病毒
但是10分钟就被httpd.exe 的cpu占用光 我发现只要将这个进程去掉 就能恢复正常 可是10分钟后又让apache瘫痪了,所以我相信一定是配置的问题
在网上都没有确切的说法和解决,后来研究httpd.conf 才知道问题
在httpd.conf 中增加 Win32DisableAcceptEx
然后更改ThreadsPerChild 的值为150 默认是250 如果你的服务器或vps内存超过2G 那么就不用设置
为什么要修改成150呢,我发现增加Win32DisableAcceptEx后内存占用就一直在上升,
详细原理 大家在百度中搜索 ThreadsPerChild。

原文地址:https://www.cnblogs.com/moqiang02/p/4061432.html