Fusic 平田です。
次の人にバトンタッチしたつもりが自分でした。
発端
このエントリが原因でサーバが落ちたのがきっかけ。
と言ってもそこまでアクセス数がすさまじかったわけでもないので、いろいろ見直した次第です。
状況としては
- 落ちた原因はメモリ枯渇
- メモリは256MB+swap1GB
といった感じです。
見直しその1 – プロセス数とか調整
とりあえずMaxClientsとかを見直し。
デフォルトのままで
<IfModule prefork.c> StartServers 8 MinSpareServers 5 MaxSpareServers 20 ServerLimit 20 MaxClients 256 MaxRequestsPerChild 4000 </IfModule> |
になっていたんですが、これだと富豪すぎるので
<IfModule prefork.c> StartServers 8 MinSpareServers 8 MaxSpareServers 8 ServerLimit 8 MaxClients 8 MaxRequestsPerChild 32 </IfModule> |
くらいまで極端に減らしました。
繋がらないとか出たらまた増やしながら様子見ようという魂胆。
各設定値についてはこのへんが参考になるかと。
省運用目的だとこのくらいで十分かな、といった印象です。
もっとメモリに余裕があって待機プロセス多くても問題ない時は
<IfModule prefork.c> StartServers 32 MinSpareServers 32 MaxSpareServers 32 ServerLimit 32 MaxClients 32 MaxRequestsPerChild 64 </IfModule> |
くらいで運用してたりします。
「これだと一斉にMaxRequestPerChild迎えて死ぬからいやん」って人はmod_bumpy_lifeがいい感じです。
見直しその2 – 不要モジュールを切る
あとは1プロセスごとの使用メモリを抑える方向に。
余計なモジュールはロードしなくていいので。
これはいらないだろう、を少しずつ切ってます。
#LoadModule authz_owner_module modules/mod_authz_owner.so #LoadModule authz_groupfile_module modules/mod_authz_groupfile.so #LoadModule authz_dbm_module modules/mod_authz_dbm.so #LoadModule ldap_module modules/mod_ldap.so #LoadModule authnz_ldap_module modules/mod_authnz_ldap.so #LoadModule env_module modules/mod_env.so #LoadModule ext_filter_module modules/mod_ext_filter.so #LoadModule dav_module modules/mod_dav.so #LoadModule dav_fs_module modules/mod_dav_fs.so #LoadModule actions_module modules/mod_actions.so #LoadModule speling_module modules/mod_speling.so #LoadModule proxy_ftp_module modules/mod_proxy_ftp.so |
もっと切っていいモジュールはあるんですが、その辺はサーバの用途とにらめっこして決めるのがいいでしょう。
で再起動して様子見
再起動してtopを画面脇に流しつつ様子見。
こっそりabでリクエスト投げたり普通にリロード連打したりで、とりあえずは安定したっぽいのでこのくらいで。
まとめると
- preforkのデフォルト設定は普通のサイトだと結構な富豪具合なので要調整
- モジュールも明らかに不要ならさっくり切る
といったところです。
あまり凝ったことをしないで済むようには心がけています。
てことで
今度こそ次の人にバトンタッチ。