码迷,mamicode.com
首页 > Web开发 > 详细

关于apache的mpm-event的参数无法调整问题

时间:2015-05-08 14:59:00      阅读:149      评论:0      收藏:0      [点我收藏+]

标签:mpm-event   apache参数调整   nginx 502   

在前面介绍了apache的几种工作模式后,但是参数调整会出现一系列问题:

/usr/local/apache/bin/apachectl -k start后httpd服务无法启动,错误日志报错:

[Fri May 08 08:21:00.903245 2015] [core:warn] [pid 29799:tid 140652774147840] AH00098: pid file /usr/local/apache/logs/httpd.pid overwritten -- Unclean shutdown of previous Apache run?
[Fri May 08 08:21:00.913540 2015] [mpm_event:notice] [pid 29799:tid 140652774147840] AH00489: Apache/2.4.2 (Unix) PHP/5.4.1 mod_fcgid/2.3.6 configured -- resuming normal operations
[Fri May 08 08:21:00.913605 2015] [core:notice] [pid 29799:tid 140652774147840] AH00094: Command line: '/usr/local/apache/bin/httpd'
[Fri May 08 08:21:00.916519 2015] [mpm_event:alert] [pid 30514:tid 140652574951168] (11)Resource temporarily unavailable: apr_thread_create: unable to create worker thread
[Fri May 08 08:21:00.916528 2015] [mpm_event:alert] [pid 30441:tid 140652574951168] (11)Resource temporarily unavailable: apr_thread_create: unable to create worker thread
[Fri May 08 08:21:00.916537 2015] [mpm_event:alert] [pid 30311:tid 140652574951168] (11)Resource temporarily unavailable: apr_thread_create: unable to create worker thread
Error in my_thread_global_end(): 1 threads didn't exit
Error in my_thread_global_end(): 1 threads didn't exit
Error in my_thread_global_end(): 1 threads didn't exit


这其实是有两方面原因导致:

1.系统内核限制,主要是max user processes,这个参数默认为1024,意思是限制每个用户的最大进程使用数,如果超过此限制即使mpm的参数设置正确也会导致httpd服务无法启动。

我们通过ulimit -u 102400来设置

具体了解请参考http://blog.yufeng.info/archives/2568这篇文章。

若设为开机启动,需要先更改/etc/security/limits.d/90-nproc.conf,此文件中nproc为进程的意思,将其修改为

*          soft    nproc     102400

然后再在/etc/rc.local中加入ulimit -u 102400

2.如果部分参数设置不正确,导致httpd服务器无法启动,至于如何调整在错误日志会有提示。

假设内核参数正常,我们以一个可以运行但是会有所warn的mpm-event来讲解下:

#<IfModule mpm_event_module>
#    ServerLimit                100
#    StartServers         20
#    MinSpareThreads        25 
#   MaxSpareThreads      1200
#    ThreadsPerChild      50 
#    MaxRequestWorkers    2000 
#    MaxConnectionsPerChild  10000 
#</IfModule>
ThreadsPerChild默认为64,若需修改需要设置ThreadLimit,必须先stop apache,然后再start,否则配置无效。

MaxSpareThreads的参数设置,需要根据StartServers*ThreadsPerChild=1000,因此MaxSpareThreads必须大于1000,在此为1200,否则会有StartServers-MaxSpareThreads/ThreadsPerChild个进程被杀掉。

MaxRequestWorkers的参数设置,需要根据ServerLimit*ThreadsPerChild=5000,在此出我们设置为2000,启动后会有警告,我们根据提示将其改为5000即可。


如果我们发现服务器的负载有点高,大都是httpd占用的,而我们还有剩余系统资源,那么我们需要更改我们的参数了。


另外,如果我们的nginx反向代理httpd,而此时httpd由于负载高处理相关请求会进入队列等待,这就会造成nginx返回502 bad gateway,而其实这是由于后端服务器处理超时导致的,我们需要查看我们的后端服务器进行解决。

关于apache的mpm-event的参数无法调整问题

标签:mpm-event   apache参数调整   nginx 502   

原文地址:http://blog.csdn.net/yanggd1987/article/details/45578395

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!