検証OSはCentOS release 6.3です。
Apacheのpreforkでプロセスの数を1024以上にしたいとき、Apacheが起動できるプロセス数を増やしてあげる必要があります。
問題
例えば以下のようなhttpd.confのApacheをulimitの設定なしに起動しようとすると、/etc/httpd/logs/error_logにエラーメッセージがぞろぞろと出力されます。
このエラーが出たら、service httpd stopではプロセスが落ちてくれません。
男らしくhttpdをザクっとkillしちゃいましょう。
解決方法
これを解消するために、Apacheが使用出来るプロセス数をアップしてあげましょう。
まず、デフォルトの設定が /etc/security/limits.d/90-nproc.conf ファイルに記述されているので、コメントアウトします。
httpdをリスタートしてみましょう。
エラーが出ていなければOKです。
簡単ですね!
他のアプリケーションなどでも、使用可能な最大プロセス数が足りなくなるといった事はたまにあります。(いや・・・案外あるかも?)
転ばぬ先の杖として、同じように設定してあげるとよいでしょう。
Apacheのpreforkでプロセスの数を1024以上にしたいとき、Apacheが起動できるプロセス数を増やしてあげる必要があります。
問題
例えば以下のようなhttpd.confのApacheをulimitの設定なしに起動しようとすると、/etc/httpd/logs/error_logにエラーメッセージがぞろぞろと出力されます。
# vi /etc/httpd/conf/httpd.confStartServers 2000 MinSpareServers 2000 MaxSpareServers 2000 ServerLimit 2000 MaxClients 2000 MaxRequestsPerChild 10000
# service httpd restartこのようなエラーが出てしまう・・・。
# tail -f /etc/httpd/logs/error_log [Mon Jan 07 14:12:12 2013] [notice] caught SIGTERM, shutting down Notice: cleaning up shared memory [Mon Jan 07 14:12:13 2013] [notice] SELinux policy enabled; httpd running as context unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 [Mon Jan 07 14:12:13 2013] [notice] suEXEC mechanism enabled (wrapper: /usr/sbin/suexec) [Mon Jan 07 14:12:13 2013] [notice] Digest: generating secret for digest authentication ... [Mon Jan 07 14:12:13 2013] [notice] Digest: done Creating shmem. name: mod_dosdetector, size: 4856 [Mon Jan 07 14:12:14 2013] [alert] (11)Resource temporarily unavailable: setuid: unable to change to uid: 48 [Mon Jan 07 14:12:14 2013] [alert] (11)Resource temporarily unavailable: setuid: unable to change to uid: 48 [Mon Jan 07 14:12:14 2013] [alert] (11)Resource temporarily unavailable: setuid: unable to change to uid: 48 [Mon Jan 07 14:12:15 2013] [notice] Apache/2.2.15 (Unix) DAV/2 mod_ssl/2.2.15 OpenSSL/1.0.0-fips configured -- resuming normal operations [Mon Jan 07 14:12:15 2013] [alert] (11)Resource temporarily unavailable: setuid: unable to change to uid: 48 [Mon Jan 07 14:12:15 2013] [alert] Child 38071 returned a Fatal error... Apache is exiting! [Mon Jan 07 14:12:15 2013] [alert] (11)Resource temporarily unavailable: setuid: unable to change to uid: 48 [Mon Jan 07 14:12:15 2013] [alert] (11)Resource temporarily unavailable: setuid: unable to change to uid: 48 [Mon Jan 07 14:12:15 2013] [alert] (11)Resource temporarily unavailable: setuid: unable to change to uid: 48 [Mon Jan 07 14:12:15 2013] [emerg] (43)Identifier removed: couldn't grab the accept mutex [Mon Jan 07 14:12:15 2013] [emerg] (43)Identifier removed: couldn't grab the accept mutex
このエラーが出たら、service httpd stopではプロセスが落ちてくれません。
男らしくhttpdをザクっとkillしちゃいましょう。
# ps -ax | grep httpd # pkill -KILL -f httpd現在のApacheユーザのulimitの設定をulimit -nコマンドで確認してみましょう。
# /bin/su - --shell=/bin/sh apache $ ulimit -n 1024ulimitが1024で設定されているため、プロセスの数がこれ以上立ち上げられなくなっています。
解決方法
これを解消するために、Apacheが使用出来るプロセス数をアップしてあげましょう。
まず、デフォルトの設定が /etc/security/limits.d/90-nproc.conf ファイルに記述されているので、コメントアウトします。
# vi /etc/security/limits.d/90-nproc.conf #* soft nproc 1024そして、/etc/security/limits.conf ファイルにApacheの設定を追記します。
# vi /etc/security/limits.conf apache soft nofile 2048 apache hard nofile 2048Apacheユーザのulimitの設定を確認してみましょう。
# /bin/su - --shell=/bin/sh apache $ ulimit -n 2048いけそうですね。
httpdをリスタートしてみましょう。
# service httpd restart # tail -f /etc/httpd/logs/error_log
エラーが出ていなければOKです。
簡単ですね!
他のアプリケーションなどでも、使用可能な最大プロセス数が足りなくなるといった事はたまにあります。(いや・・・案外あるかも?)
転ばぬ先の杖として、同じように設定してあげるとよいでしょう。