障害解決の為のコマンド
サーバが何かおかしい、そんな時にはまずtopコマンドでボトルネックを見つけることが出来ます。怪しいプロセスを見つけたらそのサービスのエラーログやクエリなどの遅延ログを表示させて原因を特定する、見当をつけながら論理的に原因解決まで淡々と行っていきます。
世界の頂点から天地創造(プロセス)を見下ろすコマンド
topである!
サーバーが重いってどんな状態?
実行したいプロセスがなかなか処理が始まらない、終わらないそんな状態。WEBサイトでいうなら、ページがなかなか切り替わらない。上から下まで読み込みが遅く表示されないっていう状態がわかり易いはず。タイムアウトされてしまう。
topで俯瞰するように原因を探ろう。更に細部を深く知りたいなら、sarやiostatなどキャパシティプランニング用のコマンドは用意されている。
ステータス解説
初めて見るとなんのこっちゃ!?ってものばかりですので、説明を書いておきます。
1行目
01:18:06 現在の時間
load average 0.58 0.92 1.05 1分 5分 15分の待機プロセスの平均
重要ポイント(ㆁᴗㆁ✿)
ロードアベレージは1以下にしよう。1以下なら滞りなく、軽快にパフォーマンスを出せています。もし常に1以上だったならチューニングの必要性あり!
ロードアベレージ 1~3
黄色信号。このあたりで重さを感じ出します。軽微なチューニングでストンッと0.3-0.5あたりに落ちる場合も多い。
ロードアベレージ 4以上
どこかに致命的なエラーが起こっている可能性大。遅延原因となるサービスを探し出し、直ちにエラーログのチェックだ!サーバーのチューニングミス、プログラム上の設計ミスの場合がある。
ロードアベレージ 30以上
「WEBサーバーが重くて運営できません!助けて下さい」と飛び込みのご相談を頂く場合はこの状態が殆ど。ログを見ればエラーの嵐。エラーが出ている状態のサーバーをお客さんに納品するのはやめよう。
2行目
Tasks 211 total 1running 210 sleeping 0 stopped 0 zombie
タスクの合計は211で1つ走っており、210は休眠状態である。
停止中のタスクはなく、ゾンビプロセスもない。
3行目
Cpu(s)
%us, ユーザプロセスの使用時間の割合
%sy, システム(カーネル)プロセスの使用時間の割合
%ni, 実行優先度を変更したプロセス使用時間の割合
%id, アイドル(待機)状態の使用時間の割合
%wa, CPUがディスクI/Oの終了待ちをしていた時間の割合
%hi, ハードウェア割り込み要求での使用時間の割合
%si, ソフトウェア割り込み要求での使用時間の割合
%st OS仮想化利用時に他のCPUの計算に待たされた割合
重要ポイント(ㆁᴗㆁ✿)
%usが高い
問題となる原因のユーザプロセスを探します。あまり%usに負荷がないのに重い場合はロードアベレージが異常になっている場合あり。問題となるプロセスを探し出すこと。
%waが高い
I/Oでのボトルネック。具体的にはステータスがDの割り込み不可の待機プロセスが怪しい。0.0%~0.1%が望ましい。
重要(ㆁᴗㆁ✿)
SSDに変更するとあっさり解決したりする。
4行目
Mem :
メモリの総容量 使用中のメモリ 未使用のメモリ バッファに使用されているメモリ容量
5行目
Swap :
スワップの総容量 使用中のメモリ 未使用のスワップ キャッシュされているスワップ容量
重要(ㆁᴗㆁ✿)
スワップはほぼ使ってはいけない。使いすぎるとサーバーが落ちます。異常なプロセスはないか、スペックは適切なのか要確認。
6行目
PID プロセスID
USER ユーザ名
PR プロセスの静的優先度(数字が低い程優先度は高い)
NI プロセスの相対的優先度(相対的優先度)-20(最高)~19(最低)
VIRT プロセスが使用している仮想メモリサイズ(スワップアウトされたメモリ使用量を加えたサイズ)
RES プロセスが使用している物理メモリサイズ
SHR プロセスが使用している共有メモリサイズ
1プロセスあたりのメモリ量 = RES – SHR
S ステータス
S スリープ
T 停止中
D 割り込み要求不可
R 実行中
Z ゾンビー
W スワップアウト
%CPU CPU使用率
%MEM メモリ使用率
TIME+プロセス実行時間
COMMAND プロセスが実行されているコマンド
ゾンビプロセス
実行終了中のプロセスをゾンビ・プロセスといいます。プロセスの処理は既に終了し,メモリーなどの資源(リソース)はすべて解放されています。ただし, プロセスが使用したメモリー領域やファイル,ソケット,シグナルなどの情報を管理するtask_struct構造体だけが存在しています。この task_struct構造体が削除されると,プロセスが消滅し,その実行が完了します。
@see http://itpro.nikkeibp.co.jp/article/Keyword/20070727/278487/
よく使うオプション
topコマンド表示中に入力すると様々なオプションで表示出来ます。
1
各CPUへの負担割合を表示
Shift + p
CPUの使用率でソート
Shift + m
メモリの使用率でソート
c
プロセスが実行されているコマンドを表示
グラフィカルで高性能なhtop
1 2 3 |
# yum install htop # htop |
未体験の方は使ってみると面白いのではないでしょうか。全体としてtopとは違いグラフィカルでわかり易い。CPUの負荷がグラフで見えて、プロセスもツリー表示が出来たりカスタマイズ出来て使い勝手がいいです。私はtopですっかり慣れてしまっているのでtopを使ってます。
結局どちらを使えばいいのか?
ずばり、好みである。
身も蓋もないですよね。どっちでも目的のリソース監視は行えるからです。ただtopよりhtopの方が直感的に使えてとっつきやすいと考えられますので、キャパシティプランニングの入門として触れるならわかりやすくて親切かもしれない。更にですよ、htopはマウス対応!どえらい奴です。(Windowsサーバー管理者にしか響きそうにないな・・・。)
htop最大のポイント
上位を表示させるtopと違い、↓ボタンで全てのプロセスを確認出来るところ。topにも導入してくれないかなー٩(๑❛ᴗ❛๑)۶
t
htop表示中にtを入力するとプロセスツリー表示になり、具合がいい。
/検索対象文字列
/httpd
などと入力するとプロセスを検索してくれます。