关于apache的mpm-event的参数无法调整问题
在前面介绍了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,而其实这是由于后端服务器处理超时导致的,我们需要查看我们的后端服务器进行解决。
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。