自宅サーバの処理遅延について
マイWEBサーバ、相変わらずレスポンスがよくありません。
現在の居住地からブログの更新を行おうとアクセスしてもそのレスポンスの悪さに思わず殺意を覚えるくらいです。
おかげさまでGoogle Adsenseの評価もうなぎ下がり・・・
印が1ヶになってしまいましたので、原因を追究して改善したいと思います。
サーバにとって負荷となりえる点を考えると
- CPUに対する負荷
- メモリに対する負荷
- ハードディスクのアクセスによる負荷
- ネットワーク関連による負荷
などが考えられます。
問題はいろいろあるのでしょうが、まずは何がボトルネックとなっているんでしょうか?
コマンドを使用して原因を調べる
現在のシステムの状況を表示したりプロセスの管理を行うコマンド「top」。
早速叩いてみます。すると
なにやらたくさん表示されました。順を追って見ていきます。
1.load average
1行目右側に表示される「load average」はCPUの処理を待っているタスクの平均数を表すのだそうです。
数字が3つ並んでいて左から順に1分、5分、15分間の平均を表示していて、一番左の数値が大きければ直近の数分間で負荷が上がっていることが見て取れるわけです。
2.Tasks
現在のタスクの数が表示されます。Zombieはその名のとおりゾンビプロセスの数を表します。ゾンビプロセスとは、「処理が終了してメモリなどのリソースも開放されているが、完全にクリアされていないプロセス」とか「終了待ちのプロセス」などと表現されます。(どのプロセスも終了後に一度ゾンビプロセスになり、その後親プロセスによって完全にクリアされるとかなんとか書かれてましたがイマイチよくわかっていません・・・)
これが滞留しているということは、最大プロセス数が決まっているLinuxでは生成できる新規プロセスの数に影響してしまうため決してよい事ではありませんので原因を追究して解消した方がよいでしょう。
3.Cpu(s)
CPUの利用率を表していて、その内訳は
- %us:ユーザプロセスが占める割合
- %sys:システムプロセスが占める割合
- %ni:niceされた(優先順位づけされた)プロセスの割合
- %id:空き
- %wa:I/O待ちのプロセスの割合
- %hi:ハードウェア割り込み要求
- %si:ソフトウェア割り込み要求
- %st:仮想プロセスの占める割合
とされています。
仮想サーバを使用している環境(共用のレンタルサーバなど)では他のユーザの影響で%stが跳ね上がることもあるようですが一般的には%wa以外は上昇すると好ましくないようです。topコマンドの実行中(表示中)の状態で「P(shift+p)」と入力することでCPU利用率の高い順にソートしてくれるので上から順に検証するのがよいでしょう。
インストールしたプログラムであれば設定を、自作のプログラムが原因と思われる場合はその中身を確認するなどして対処します。
4.Mem
メモリの利用率を表し、その内訳は
- total:搭載しているメモリの合計
- used:使用中のメモリ
- free:空き領域
- buffers:確保されている領域
となります。
これまた「M(shift+m)」にて利用率順にソートされますので、設定などを見直す必要が出てくる場合もあるでしょう。
5.Swap
スワップ領域の使用率で、内訳は上記のMemと同様です。
メモリはスカスカなのにスワップが大量に使用されている・・・なんてことがあれば原因を調べた方が絶対よいはず!
基本的な見方はこのような感じではないでしょうか。
その下に続くのは各プロセスの状況を表していて
- PID:プロセスの識別番号
- USER:プロセスを実行しているユーザ
- PR:優先度
- NI:相対的優先度(nice)で-20(最高)~19(最低)によるランク付け
- VIRT:スワップアウトを含む、プロセスの仮想メモリサイズ
- RES:プロセスが使用する物理メモリ(スワップ除く)
- SHR:プロセスが使用する共用メモリ
- S:状態(※)
- %CPU:CPUの使用率
- %Mem:メモリの使用率
- TIME+:プロセスの実行時間(秒)
- COMMAND:実行中のコマンド
を表していて、※の状態についてはさらに
- S:スリープ中
- T:停止状態
- D:割り込み不可の状態
- N:niceがプラスの値(優先度低い)
- <:niceがマイナスの値(優先度高い)
- R:実行中
- Z:ゾンビプロセス
- W:スワップアウトしているプロセス
ということになります。
このように、topコマンドを使用することでサーバマシンの現在の情報をある程度かいつまんで見ることができます。
自分の場合、パッと見で問題がありそうというか気になったのはメモリ(特にfreeが少ない?)なので、続いてはメモリの状況を調べてみたいと思います。