当我尝试每秒处理 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
服务器内存:64GB DDR3
然后我尝试了以下设置
<IfModule mpm_event_module>
StartServers 80
MinSpareThreads 50
MaxSpareThreads 300
ThreadLimit 25
ThreadsPerChild 25
ServerLimit 500
MaxRequestWorkers 2000
MaxConnectionsPerChild 0
</IfModule>
但问题仍未解决,梗塞产生了更多错误并且日志写入器开始消耗 CPU
输出httpd -V | grep -i 'version\|mpm'
如下
Server version: Apache/2.4.6 (CentOS)
Server MPM: event
答案1
ServerLimit 未定义/未读取,但是您想要尝试的值仍然没有意义,因为每个子线程已经强制将服务器限制设置为 80。
为什么你使用这么少的线程?你生成了太多不必要的子进程,可能会降低 Apache 进程的性能(生成进程比线程更昂贵)
笔记:MPM 设置需要完全停止/启动(而不是重新启动)。
设置此项。
StartServers 1
ServerLimit 4
MinSpareThreads 500
MaxSpareThreads 1500
MaxRequestWorkers 2000
ThreadsPerChild 500
ThreadLimit 500
MaxConnectionsPerChild 0
MaxKeepAliveRequests 1500
KeepAlive On
KeepAliveTimeout 10
并且一定要确保您已完全停止,然后才开始真正应用更改。