なんだか知らないけど、最近、うちのサーバがよく固まる。なんでやろうと不思議に思って、放ったらかしにしてたけど、ちゃんと調べてみた。
なんだか知らないけど、忘れた頃にサーバが固まる。
このサーバが固まると、DNSが引けなくなるので、外のWEBが見られなくなるし、外からこのページが見られなくなる。
なんでやろ。
ふと、思い立って、ab
ab -n 1000 -c 100 http://www.cagylogic.com/
あっさり固まりました。なんだ、apacheがスワップアウトしてたのか。
/usr/sbin/apache2ctl -V
で
Server MPM: Prefork
threaded: no
forked: yes (variable process count)
の行が表示されることを確認。というか、PHPでWordpress動かしてるんだから、Preforkなんだけどさ。
たしかこのサーバは512Mのメモリを積んでいたはず。
ということで、/etc/apache2/apache.confのmpm_prefork_moduleのあたりを見直す。
<IfModule mpm_prefork_module>
StartServers 5
MinSpareServers 5
MaxSpareServers 10
MaxClients 150
MaxRequestsPerChild 0
</IfModule>
いやいやいやいや。そりゃ無理だっペ。
一旦再起動して、freeコマンド
total used free shared buffers cached
Mem: 508224 243804 264420 0 19380 90832
-/+ buffers/cache: 133592 374632
Swap: 1535996 0 1535996
ま、そんなもんですね。
top – 03:31:33 up 8 min, 1 user, load average: 0.12, 0.12, 0.07
Tasks: 88 total, 1 running, 87 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.3%us, 0.0%sy, 0.0%ni, 98.3%id, 1.3%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 508224k total, 317632k used, 190592k free, 20060k buffers
Swap: 1535996k total, 0k used, 1535996k free, 99916k cachedPID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1261 www-data 20 0 56212 31m 4180 S 0.0 6.4 0:01.38 apache2
1260 www-data 20 0 47664 23m 4140 S 0.0 4.6 0:00.75 apache2
1264 www-data 20 0 46340 21m 4032 S 0.0 4.4 0:00.76 apache2
1266 www-data 20 0 46340 21m 4032 S 0.0 4.4 0:00.75 apache2
1267 www-data 20 0 46316 21m 4048 S 0.0 4.4 0:00.80 apache2
1263 www-data 20 0 46204 21m 4016 S 0.0 4.3 0:00.84 apache2
854 mysql 20 0 153m 20m 5700 S 0.0 4.2 0:01.49 mysqld
1262 www-data 20 0 46132 20m 3480 S 0.0 4.2 0:00.58 apache2
824 bind 20 0 55424 15m 2360 S 0.0 3.0 0:00.16 named
1257 root 20 0 31816 7316 4000 S 0.0 1.4 0:00.38 apache2
topで見ると、apache一本あたり、20Mから30Mのメモリの使用。ちうことは、maxclientは15とすると、30M×15=450Mなんで、このへんが壁かと。
<IfModule mpm_prefork_module>
StartServers 3
MinSpareServers 3
MaxSpareServers 10
MaxClients 15
MaxRequestsPerChild 30
</IfModule>
ということで、apache2.confは、こんな感じに。
StartServersとMaxSpareServersは3でかなり少なめに。MaxClientは先程の計算により15。増やせたとしても20だとぎりぎりになっちゃうからねぇ。まぁ15でいいかな。MaxClientが15なら、MaxSpareSerrversは3割引で10。MaxRequestsPerChildは、どうしようか迷った挙句、30に。あんまり長生きしてメモリリークしても嫌だし。でも、がんがん死ぬのも嫌だし。
この設定でapacheをリスタート。
ab再挑戦。
ab -n 1000 -c 100 http://www.cagylogic.com/
今度は固まりません。いい感じ。もちろん、1000もリクエストやったら、むちゃくちゃ時間がかかるので、途中で止めたけど。
前よりも、遅くなってるはずなんだけど、気分的に、固まらない方がいいんだろうな。
ちょっと、この設定で続けてみよう。
ページアウトって今のご時世、意味あるのかな。現実的な速度が出なくなるならあんまり意味が無いような。。。まぁ無いとは言えないか。。。
512MBは「今のご時世」ではないぞ。
サーバーは落ちてないけど、ルーターの調子が悪い。切れる。