zoukankan      html  css  js  c++  java
  • 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。

  • 相关阅读:
    面试官:能解释一下javascript中bind、apply和call这三个函数的用法吗
    接口测试基础004----常见的post请求中的参数形式
    JMeter基础017----JMeter自带录制功能使用
    JMeter基础016----JMeter文件上传与下载
    JMeter基础018----生成HTML测试报告
    JMeter基础019----JMeter接口功能、性能、自动化测试
    接口测试基础002----HTTP请求、RESTful风格
    Jmeter报错001--- ERROR o.a.j.JMeter: Uncaught exception in thread Thread[AWT-EventQueue-0,6,main] java.lang.InternalError: Could not bind shell folder to interface
    Jmeter基础014----组件总结、FTP(了解)及其他不重要组件
    Jmeter基础013----图形监视器之监控服务器资源
  • 原文地址:https://www.cnblogs.com/moqiang02/p/4061432.html
Copyright © 2011-2022 走看看