web-dev-qa-db-ja.com

AH00161:サーバーがMaxRequestWorkers設定に達しました。MaxRequestWorkers設定を上げることを検討してください

私は非常に忙しいサーバーを持っています:PHP(Wordpress)W3TotalCache APC、Apache用のVarnishおよびCloudflareを使用してすべてのトラフィックを処理します。Ubuntu14.04.4 LTS

1日あたり平均約6万件のヒットがあるウェブサイトは1つだけです。

私はこのメッセージをたまに1日数回受け取ります。一時的なトラフィックの急増とは関係ありません。Googleアナリティクスと時間を比較しました。

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
....
....

そこで、最初に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>

多くの空きRAMがあり、負荷平均は約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

Apacheが中断する理由はありますか?

// j

11
Joakim Ling

基本的に、configは/etc/Apache2/mods-available/mpm_prefork.confで上書きされました。

そのファイルに新しい設定を入れて、Apacheが正しく動作するようになりました。

これが他の人の助けになることを願っています。Apache2.confまたはhttpd.confに設定を直接入れないでください。ロードされたすべての構成ファイルを必ず変更してください。

13
Joakim Ling

編集する必要がありますmpm_prefork

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

7
Yort

間違ったファイルを変更しました。ログには「mpm_prefork」エラーが表示されます。そのため、mpm_worker.confではなくmpm_prefork.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)
3
redice

Webサーバーのアクセスログを確認することをお勧めします。ログがxml-rpcの投稿であふれている場合、xml-rpc攻撃の標的になる可能性があります(例: "POST /xmlrpc.php HTTP/1.1" 200 403)。これを防ぐにはさまざまな方法がありますが、Wordpressはこの傾向があります。

0
Cristi Lepadatu