我的网站生成时,我试图达到每秒1000请求。 我在我的apache日志中看到以下错误
Apr 06 00:00:33 ns503772******100.net httpd[9585]: AH00515: WARNING: MaxRequestWorkers of 2000 would require 80 servers and Apr 06 00:00:33 ns503772******100.net httpd[9585]: would exceed ServerLimit of 16, decreasing to 400. Apr 06 00:00:33 ns503772******100.net httpd[9585]: To increase, please see the ServerLimit directive.
我目前的设置是
<IfModule mpm_event_module> LoadModule cgid_module modules/mod_cgid.so MaxRequestWorkers 2000 </IfModule>
我正在使用Plesk Onyx,服务器规格如下。
处理器:Intel Xeon E5-1620v2 – 4c / 8t – 3.7 GHz / 3.9 GH
Sever Ram:64GB DDR3
然后我尝试了以下设置
<IfModule mpm_event_module> StartServers 80 MinSpareThreads 50 MaxSpareThreads 300 ThreadLimit 25 ThreadsPerChild 25 ServerLimit 500 MaxRequestWorkers 2000 MaxConnectionsPerChild 0 </IfModule>
但问题仍未解决,其产生更多的错误和logging笔记本开始吃CPU的梗塞
输出httpd -V | grep -i 'version\|mpm' httpd -V | grep -i 'version\|mpm'在下面
Server version: Apache/2.4.6 (CentOS) Server MPM: event
ServerLimit没有被定义/不被读取,但是你想要尝试的值是没有意义的,因为每个子线程的线程已经强制serverlimit到80。
为什么你使用这么less的线程呢? 你正在生成太多的subprocess而不需要,可能会使Apache在进程中性能较差(产生的进程比线程更昂贵)
注意: MPM设置需要FULL STOP / START(不重启)。
设置这个。
StartServers 1 ServerLimit 4 MinSpareThreads 500 MaxSpareThreads 1500 MaxRequestWorkers 2000 ThreadsPerChild 500 ThreadLimit 500 MaxConnectionsPerChild 0 MaxKeepAliveRequests 1500 KeepAlive On KeepAliveTimeout 10
并确保你做了一个句号,然后开始为真正的变化申请。