我爱编程

Apache突然罢工,背后究竟谁做了手脚?

2018-04-12  本文已影响28人  Gneeux
    快要下班时,收到信息,公司有的页面打不开!!!!
    
    发现原因是:Apache 罢工了。
    
    犹记的过年的期间也出现过这个事情,那时只是偷懒,重启了服务器就好了。    
    
    既然今天又出现了,我们就去查看下究竟是我没有给Apache吃饱饭,还是它自己偷懒。
    解决问题步骤:
    
    1、 查看apache 错误日志;发现日志记录
    Server ran out of threads to serve requests.Consider raising the ThreadsPerChild setting  
    
    大概意思就是:进程的线程数不够用,可以修改ThreadsPerChild,即每个子进程开启的并发线程数。
        
    2、了解错误
    Apache 2.X  支持插入式并行处理模块,称为多路处理模块(MPM)。    
    在编译apache时必须选择也只能选择一个MPM,例如:mpm_beos、mpm_event、mpm_netware、mpmt_os2、mpm_prefork、mpm_winnt、mpm_worker。
         
    Windows操作系统上默认的MPM模块是mpm_winnt,mpm_winnt模块是专门针对Windows操作系统而优化设计的MPM模块。它只创建一个单独的子进程,并在这个子进程中轮流产生多个线程来处理请求。
    
    3、解决问题
    查看apache用的什么模块,可用命令httpd.exe -l(必须在apache的bin下执行该命令)
    修改MPM模块配置:
    在Apace安装目录/conf/extra目录中有一个名为httpd-mpm.conf的配置文件。该文件主要用于进行MPM模块的相关配置。
     
    不过,在默认情况下,Apache的MPM模块配置文件并没有启用。因此,我们需要在httpd.conf文件中启用该配置文件,如下所示:
    
   
    # Server-pool management (MPM specific)
    Include conf/extra/httpd-mpm.conf (去掉该行前面的注释符号"#")
    
    修改http-mpm.conf文件
    #由于mpm_winnt模块只会创建1个子进程,因此这里对单个子进程的参数设置就相当于对整个Apache的参数设置。

    <IfModule mpm_winnt_module>
        ThreadsPerChild      521 #默认值是150,推荐设置:小型网站=1000 中型网站=1000~2000 大型网站=2000~3500
        MaxRequestsPerChild    3000 #推荐设置:小=10000 中或大=20000~100000
    </IfModule>
    

上一篇 下一篇

猜你喜欢

热点阅读