AH00161:服务器达到MaxRequestWorkers设置,请考虑提高MaxRequestWorkers设置

Joa*_*ing 11 apache ubuntu-14.04

我有一个非常繁忙的服务器:PHP(Wordpress)使用W3TotalCache APC,Varnish for Apache和Cloudflare来处理所有流量.Ubuntu 14.04.4 LTS

只有一个网站平均每天点击量约为6万次.

我时不时地得到这个消息,一天几次.与暂时的流量高峰无关,我们将时间与Google Analytics进行了比较.

Thu Apr 28 14:14:42.938075 2016] [mpm_prefork:error] [pid 19137] AH00161: server reached MaxRequestWorkers setting, consider raising the MaxRequestWorkers setting
[Thu Apr 28 15:43:25.594147 2016] [core:notice] [pid 19137] AH00051: child pid 19866 exit signal Segmentation fault (11), possible coredump in /etc/apache2
[Thu Apr 28 15:43:25.594313 2016] [core:notice] [pid 19137] AH00051: child pid 20386 exit signal Segmentation fault (11), possible coredump in /etc/apache2
[Thu Apr 28 15:43:25.594407 2016] [core:notice] [pid 19137] AH00051: child pid 19143 exit signal Segmentation fault (11), possible coredump in /etc/apache2
[Thu Apr 28 15:43:25.594498 2016] [core:notice] [pid 19137] AH00051: child pid 19144 exit signal Segmentation fault (11), possible coredump in /etc/apache2
[Thu Apr 28 15:43:25.594572 2016] [core:notice] [pid 19137] AH00051: child pid 20597 exit signal Segmentation fault (11), possible coredump in /etc/apache2
[Thu Apr 28 15:43:25.594642 2016] [core:notice] [pid 19137] AH00051: child pid 20395 exit signal Segmentation fault (11), possible coredump in /etc/apache2
[Thu Apr 28 15:43:25.594704 2016] [core:notice] [pid 19137] AH00051: child pid 20424 exit signal Segmentation fault (11), possible coredump in /etc/apache2
[Thu Apr 28 15:43:25.594785 2016] [core:notice] [pid 19137] AH00051: child pid 20598 exit signal Segmentation fault (11), possible coredump in /etc/apache2
[Thu Apr 28 15:43:25.594870 2016] [core:notice] [pid 19137] AH00051: child pid 19861 exit signal Segmentation fault (11), possible coredump in /etc/apache2
[Thu Apr 28 15:43:25.594957 2016] [core:notice] [pid 19137] AH00051: child pid 19782 exit signal Segmentation fault (11), possible coredump in /etc/apache2
....
....
Run Code Online (Sandbox Code Playgroud)

所以我首先将MaxRequestWorkers增加到100,然后是500,现在是1024.但仍然在发生.

这是我的apache2.conf.码:

<IfModule mpm_worker_module>
StartServers 256
MinSpareThreads 256
MaxSpareThreads 256
MaxClients 256
ServerLimit 256
ThreadLimit 256
ThreadsPerChild 256
MaxRequestWorkers 1024
MaxConnectionsPerChild 0
MaxRequestPerChild 1000
</IfModule>
Run Code Online (Sandbox Code Playgroud)

有很多可用内存,平均负载大约为0.5,有时超过1.但从未见过它高于2.所以服务器似乎是健康的处理流量.

top - 16:07:47 up 3 days, 18:18,  2 users,  load average: 0.57, 0.46, 0.55
Tasks: 113 total,   1 running, 112 sleeping,   0 stopped,   0 zombie
%Cpu(s): 10.5 us,  2.0 sy,  0.0 ni, 87.4 id,  0.1 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem:   8176816 total,  2372560 used,  5804256 free,   189684 buffers
KiB Swap:        0 total,        0 used,        0 free.  1286692 cached Mem

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND                                                                                                                                              
21930 www-data  20   0  337212  83308  60072 S  24.9  1.0   0:52.89 apache2                                                                                                                                              
21945 www-data  20   0  327640  72684  58816 S  24.3  0.9   0:48.37 apache2                                                                                                                                              
 1182 nobody    20   0  702868 442268  83496 S   0.7  5.4  42:41.32 varnishd
Run Code Online (Sandbox Code Playgroud)

Apache中断的任何想法?

∥焦

Joa*_*ing 14

基本上配置得过分:/etc/apache2/mods-available/mpm_prefork.conf

我把新设置放在该文件中,似乎Apache现在正常工作.

希望这有助于其他人,不要将您的配置直接放在apache2.conf或httpd.conf中.确保更改所有加载的配置文件.

  • 我很高兴它似乎已经为你解决了,但当你说"我把新设置放在那个文件中"时,你指的是哪个设置?什么是旧的价值和新的价值是什么? (11认同)
  • Downvoting:此响应对其他任何人都没有用 - 您不包括您实际做出的更改,或者就此问题的其他人可以做什么来解决它.请更新您替换/等的config/key-value-pairs的有用信息/片段. (8认同)
  • 尽管没有包括所有相关信息,@ LucianoFantuzzi OP选择了他们自己的答案是正确的."新设置"......人们可以从页面的其余部分推断出关键和价值,但这个答案本身仍然缺乏完整性.如果OP会进行少量编辑以包含键和值,那么我就是为了它! (6认同)

小智 9

你应该编辑 mpm_prefork

<IfModule mpm_prefork_module> StartServers 10 MinSpareServers 10 MaxSpareServers 20 ServerLimit 2000 MaxRequestWorkers 1500 MaxConnectionsPerChild 10000 </IfModule>


red*_*ice 6

你修改了错误的文件。您的日志显示“mpm_prefork”错误。所以需要修改mpm_prefork.conf而不是mpm_worker.conf。

您还可以使用“apachectl -M”来查看您正在使用的模块。例如我的 apache2 正在使用 mpm_event_module,所以我需要修改 mpm_event.conf

$ apache2ctl -M
Loaded Modules:
 core_module (static)
 so_module (static)
 watchdog_module (static)
 http_module (static)
 log_config_module (static)
 logio_module (static)
 version_module (static)
 unixd_module (static)
 access_compat_module (shared)
 alias_module (shared)
 auth_basic_module (shared)
 authn_core_module (shared)
 authn_file_module (shared)
 authz_core_module (shared)
 authz_host_module (shared)
 authz_user_module (shared)
 autoindex_module (shared)
 deflate_module (shared)
 dir_module (shared)
 env_module (shared)
 filter_module (shared)
 mime_module (shared)
 **mpm_event_module (shared)**
 negotiation_module (shared)
 setenvif_module (shared)
 status_module (shared)
 wsgi_module (shared)
Run Code Online (Sandbox Code Playgroud)


小智 6

就我而言,我找不到任何解决方案,因此我将在此留下此答案以帮助其他遇到此问题的人。在我们的例子中,增加 MaxRequestWorkers 没有帮助。

我们有一台至少运行良好一年的服务器。突然间,它开始出现连接 https 的问题。在 apache 错误日志中,我们发现“服务器达到 MaxRequestWorkers”错误,但流量非常慢(30 - 40 个访问者活跃)。

经过深入查看日志和一些研究后,我发现问题是Slowloris DoS 攻击

这种攻击很容易缓解。你可以看看这个帖子