さくらのVPS512にapache+wordpressを入れてこのブログを運営していますが、最近1日1回ぐらい応答無しになってました^^; といってもこのブログのアクセス数はそんなにたいしたもんではないです。なにが悪いんだろうなと思って調べて見ましたので、その途中経過。主にfreeやらpsコマンド中心です。
症状
・ブログのURLにブラウザから接続しても応答なし
・SSHで繋ごうとしても、応答がめちゃくちゃ遅い。ssh実行後1分後ぐらいでつながる。いつもは1秒ぐらいでつながるので、激遅。
その後コマンドを入力しても、キーボード入力→Terminalに表示までが20秒ぐらい?いつもは瞬時なので、これも激遅。
とにかく全ての動作が遅いorz
調査
さくらのVPS512上では、ほとんどこのブログ(apache+wordpress)しか動かしていない。そんなに反応が遅くなるということは原因にメモリかCPUぐらいしかないけど、CPUよりもメモリがよく不足していたのでメモリから調べてみました。
といってもSSHは上のような状態でものすごい反応が遅いので、さくらインターネットVPSコントロールパネルにログインし「リモートコンソール」からfreeなどのコマンドを実行しました。
apacheが応答なしだったときの記録
$ free total used free shared buffers cached Mem: 509792 504716 5076 0 556 16020 -/+ buffers/cache: 488140 21652 Swap: 2048276 1346444 701832
単位はKです。まずfreeコマンドでメモリを調べると、さくらのVPS512のメモリ容量512メガ(=512000キロ)をほとんど使い果たし、2ギガ割り当てられているswapのうち1.3ギガ程度を使用している、と。…メモリ使いすぎだろ(´Д`)
何回か応答無しになった時に調べてみると、どうもSwapの使用量が1ギガぐらいを越えてくると急激にサーバの反応が遅くなるようです。
ついでにapacheのプロセスを調べると
$ ps aux|grep httpd USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND apache 29309 0.5 3.0 486560 15364 ? D 21:01 0:18 /usr/sbin/httpd apache 29391 1.1 4.6 493636 23528 ? D 21:26 0:19 /usr/sbin/httpd apache 29393 1.1 2.5 484420 13236 ? S 21:26 0:20 /usr/sbin/httpd apache 29434 1.2 3.7 484476 18976 ? D 21:35 0:15 /usr/sbin/httpd apache 29477 3.2 3.4 482352 17484 ? D 21:46 0:16 /usr/sbin/httpd apache 29478 2.5 3.6 476208 18656 ? S 21:46 0:12 /usr/sbin/httpd apache 29482 2.4 4.7 480076 23984 ? D 21:46 0:12 /usr/sbin/httpd apache 29483 2.5 3.9 475184 20324 ? D 21:46 0:12 /usr/sbin/httpd apache 29484 2.3 2.3 312612 11816 ? D 21:46 0:11 /usr/sbin/httpd apache 29485 2.8 4.2 483376 21700 ? D 21:46 0:14 /usr/sbin/httpd apache 29495 2.2 2.7 480592 14144 ? D 21:47 0:10 /usr/sbin/httpd apache 29497 2.5 4.4 476208 22652 ? D 21:47 0:12 /usr/sbin/httpd apache 29499 2.3 2.9 312612 15116 ? D 21:47 0:11 /usr/sbin/httpd apache 29500 1.6 3.9 480592 20376 ? D 21:47 0:07 /usr/sbin/httpd apache 29502 1.5 3.2 480592 16364 ? D 21:47 0:07 /usr/sbin/httpd apache 29523 2.0 4.2 480592 21500 ? D 21:47 0:09 /usr/sbin/httpd apache 29524 2.2 4.3 482660 21988 ? D 21:47 0:10 /usr/sbin/httpd apache 29525 2.0 4.4 483684 22580 ? D 21:47 0:09 /usr/sbin/httpd apache 29527 1.8 3.3 482660 17184 ? D 21:47 0:08 /usr/sbin/httpd apache 29528 1.8 3.3 480084 16992 ? D 21:47 0:08 /usr/sbin/httpd apache 29529 2.0 4.5 480592 23172 ? D 21:47 0:09 /usr/sbin/httpd apache 29530 1.6 3.1 479568 15968 ? D 21:47 0:07 /usr/sbin/httpd apache 29531 1.1 4.3 479584 21988 ? D 21:47 0:05 /usr/sbin/httpd apache 29532 1.4 3.3 479568 16992 ? D 21:47 0:06 /usr/sbin/httpd apache 29533 2.1 3.6 480592 18832 ? D 21:47 0:09 /usr/sbin/httpd apache 29545 1.2 3.7 479568 19176 ? D 21:48 0:05 /usr/sbin/httpd apache 29550 1.3 4.4 477780 22604 ? D 21:49 0:04 /usr/sbin/httpd apache 29551 0.5 6.6 462416 33932 ? D 21:49 0:01 /usr/sbin/httpd apache 29574 0.0 0.7 414768 3820 ? S 21:54 0:00 /usr/sbin/httpd
なにこの大量のapache軍団はorz 「もうやめて!apacheの残りメモリはとっくにゼロよ!」というセリフが頭の中をよぎった。
psコマンドでの出力の場合、4番目の項目が全体に対するメモリ使用量、5番目(VSZ)が仮想メモリ使用量、6番目の項目(RSS)がプロセスのメモリ使用量(単位はキロ)。計算していくとapacheだけで仮想メモリ12ギガ程度(VSZの合計)、物理メモリ512メガ程度(RSSの合計)を使用している。仮想メモリが大変すぎるorz そりゃ反応なくなるわ。プロセスがいくらなんでも起動しすぎのような…
とりあえずSSHだと非常に遅くて対処しづらいので、さくらインターネットVPSコントロールパネルのバーチャルコンソール上から
# apachectl restart
と、apache再起動で治ったけど…最近少しこういう状態が多いので、次は設定ファイルを調べてみようと思います。
—-参考リンク
【 ps 】 実行中のプロセスを表示する – Linuxコマンド集:ITpro
ps auxの見方 | OpenMediaLaboratory