『httpd(Apache)が立ち上がらない時のまとめ』の追記

以前まとめました、
httpd(Apache)が立ち上がらない時のまとめ
にとても有益なコメントコメントって改行できるのかな?さんより頂きました。
(名前は本意ではないかもしれませんが、投稿時ままとさせて頂いてます)
とても分かりやすくまとめてご指摘いただけているのでここに改めて掲載させて頂きます。


コメントって改行できるのかな?
さん
> 時間がくれば必ず落ちる。
ノー ちがいます。 時間ではありません。

httpdの子プロセスはMaxRequestsPerChildディレクティブに設定された回数分の処理を行って自滅します

CentOS標準のApache2.2をお使いなら MaxRequestsPerChildは 4000 もしくは0という値が設定されているでしょう。
$ grep MaxRequestsPerChild /etc/httpd/conf/httpd.conf | grep -v ^#
MaxRequestsPerChild 4000
MaxRequestsPerChild 0

これは、httpd.conf全体をみればわかりますが
Server MPM: Preforkの時 MaxRequestsPerChild 4000
Server MPM: Wokerの時: MaxRequestsPerChild 0
という意味です。

自分がどちらのMPMを使っているか知りたい場合は
$ /usr/sbin/httpd -V | grep “Server MPM”
で確認しましょう。

そしてセマフォが枯渇することが分かっているのなら泥縄的対処ではなくはじめから多めに確保すればいいんじゃないでしょうか?
# sysctl -a | grep kernel.sem
kernel.sem = 250 32000 32 128

SEMOPMとSEMMNIの値を増やしたいなら

(1) /proc/sys/kernel/sem 以下に直接値を叩き込む方法
# echo “250 32000 128 1024″ > /proc/sys/kernel/sem

(2) 恒久的に設定したいなら
#vi /etc/sysctl.cof
1行追加
kernel.sem = 250 32000 128 1024
#sycctl -p

詳しくは RedHatの公式ドキュメント
http://www.redhat.com/docs/manuals/enterprise/RHELTuningandOptimizationforOracleV11.pdf
19ページ Setting Semaphoresを参照してくださいね

日本語でかいつまんで説明しているドキュメントは ココ
http://www.oracle.co.jp/2shin/no86/o35linux.html

ね?わかりやすいでしょ。知ったかぶりでも記事にしておけばコメントって改行できるのかな?さんのような素晴らしいコメントを頂ける。恥を晒す分得るものがあるってなもので、差し引いたとしても大変嬉しい価値あることです。一人占めはもったいないので、皆さんもお役に立ててください。

実際に試してみました

[acc@host]# cat /proc/sys/kernel/sem
250     32000   32      128

[acc@host]# cat /etc/sysctl.conf
(略)
# Controls the maximum shared segment size, in bytes
kernel.shmmax = 68719476736

# Controls the maximum number of shared memory segments, in pages
kernel.shmall = 4294967296

#ここに追記してみました。
kernel.sem = 250 32000 128 1024

[acc@host]# sysctl -p
net.ipv4.ip_forward = 0
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.default.accept_source_route = 0
kernel.sysrq = 0
kernel.core_uses_pid = 1
net.ipv4.tcp_syncookies = 1
kernel.msgmnb = 65536
kernel.msgmax = 65536
kernel.shmmax = 68719476736
kernel.shmall = 4294967296
kernel.sem = 250 32000 128 1024     #/etc/sysctl.conf 追記以前にはこの行は表示されていなかった。

[acc@host]# cat /proc/sys/kernel/sem
250     32000   128     1024        #同時にこのファイルも変更されている。

今後調べないといけないかな、と思うこと

  • ulimit のこと
  • そもそものセマフォってなんなのか
  • apachectl restart が安全な理由

でしょうか。

Leave a Reply