一歩先を行くtopコマンドの使い方と高機能なhtopのご紹介 Linux

nginx アクセス負荷 wordpress

障害解決の為のコマンド

サーバが何かおかしい、そんな時にはまずtopコマンドでボトルネックを見つけることが出来ます。怪しいプロセスを見つけたらそのサービスのエラーログやクエリなどの遅延ログを表示させて原因を特定する、見当をつけながら論理的に原因解決まで淡々と行っていきます。

世界の頂点から天地創造(プロセス)を見下ろすコマンド


topである!

 

サーバーが重いってどんな状態?

実行したいプロセスがなかなか処理が始まらない、終わらないそんな状態。WEBサイトでいうなら、ページがなかなか切り替わらない。上から下まで読み込みが遅く表示されないっていう状態がわかり易いはず。タイムアウトされてしまう。

 

topで俯瞰するように原因を探ろう。更に細部を深く知りたいなら、sariostatなどキャパシティプランニング用のコマンドは用意されている。

ステータス解説

初めて見るとなんのこっちゃ!?ってものばかりですので、説明を書いておきます。

 

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

top cpu 表示

各CPUへの負担割合を表示

Shift + p

 

top cpu使用率ソート表示

CPUの使用率でソート

 

Shift + m

メモリの使用率でソート

 

c

top c  オプション プロセスのコマンド表示

プロセスが実行されているコマンドを表示

グラフィカルで高性能なhtop

 

htop linux

 

 

未体験の方は使ってみると面白いのではないでしょうか。全体としてtopとは違いグラフィカルでわかり易い。CPUの負荷がグラフで見えて、プロセスもツリー表示が出来たりカスタマイズ出来て使い勝手がいいです。私はtopですっかり慣れてしまっているのでtopを使ってます。

 

結局どちらを使えばいいのか?

ずばり、好みである

身も蓋もないですよね。どっちでも目的のリソース監視は行えるからです。ただtopよりhtopの方が直感的に使えてとっつきやすいと考えられますので、キャパシティプランニングの入門として触れるならわかりやすくて親切かもしれない。更にですよ、htopはマウス対応!どえらい奴です。(Windowsサーバー管理者にしか響きそうにないな・・・。)

htop最大のポイント

上位を表示させるtopと違い、↓ボタンで全てのプロセスを確認出来るところ。topにも導入してくれないかなー٩(๑❛ᴗ❛๑)۶

t

 

htop t tree表示

htop表示中にtを入力するとプロセスツリー表示になり、具合がいい。

 

/検索対象文字列

/httpd
などと入力するとプロセスを検索してくれます。

 

 

優 ( エンジニア )

この記事を書いた人:優 ( エンジニア )

システムガーディアン爆弾処理班Nginxへの移行案件が多いこの頃
自社サイトを魔改造するのが趣味、JavaScript
東京は花火大会のシーズンが終わり盆踊りの季節へ(◍•ᴗ•◍)

この記事に関してのお問い合わせ
御連絡・ご返信は原則2営業日以内を予定しております。
お急ぎの場合は、お手数ですが下記電話でもご対応をしております。

システムガーディアン株式会社
受付時間:平日9:00~18:00
受付担当:坪郷(つぼごう)・加藤
電話:03-6758-9166