
こんにちは。さっとんです
Linuxサーバーを運用する上でこのような悩みはないでしょうか。
・プロセスの起動状況/負荷状況を確認したい
・メモリの状況について確認したい
・CPUのロードアベレージについて確認したい
・サーバーの起動時間について確認をしたい
・プロセス/メモリ/CPU等の状況をまとめて確認したい
この悩みはLinuxサーバーを運用している方だと誰もが持っていると思います。
実はLinuxサーバーの負荷状況をまとめて確認できるコマンドがあります。
それが「top」コマンドになります。
今回は「top」コマンドの実務での使い方について解説したいと思います。
本記事を読むメリット
・運用業務でのtopコマンドの使い方がわかる
・topコマンドを使用するタイミングがわかる
では、解説していきたいと思います。
topコマンドの結果の見方
topコマンドの実行結果はこちらとなります。

運用業務に必要な点をかいつまんで解説していきたいと思います。
現在時刻/起動時間

赤枠の部分になります。
見方としては下記になります。
「08:04:43」: 現在時刻
「12min」: 起動後の経過時間
「1user」: 現在サーバーにログインしているユーザー数
こちらの情報は以前紹介した「w」コマンドでも確認できます。
「w」コマンドで確認した方が早いので、そちらの方で確認することをおすすめします。
ロードアベレージ

CPUの負荷状況になります。
左から「過去1分」「過去5分」「過去15分」となります。
上の画像を例にするとこのようになります。
「0.08」:過去1分のロードアベレージ
「0.06」:過去5分のロードアベレージ
「0.07」:過去15分のロードアベレージ
こちらも以前紹介した「w」コマンドで確認できます。
タスク数

2行目の項目になります。
解説するとこのようになります。
169 total :プロセスの総数が169個
1 running:現在動いているプロセス数
0 stopped:停止しているプロセス数
0 zonbie :ゾンビプロセス数
こちらについては僕のLinux運用業務の経験上、深く見ることはありませんでした。
強いて言うならば、気にする項目としては「ゾンビプロセス数」です。
ゾンビプロセスとは
→プロセスとしての役割を終えているのにも関わらず、残り続けるプロセス
例)
バイオハザードに出てくるゾンビをプロセスに例えたようなもの
(生きていないのに動いているもの)
こちらはリソースを逼迫するため、プロセスを強制的に停止させる必要があります。
そのためにこちらのゾンビプロセスを見る必要があります。
CPUの状態

CPUの状態を確認する行になります。
解説すると下記になります。
0.2%us : ユーザプロセスの使用時間
0.2%sy : システムプロセスの使用時間
0.0%ni : 実行優先度を変更したユーザプロセスの使用時間
99.7%id : アイドル状態の時間
0.0%wa : I/Oの終了待をしている時間
0.0%hi : ハードウェア割込み要求での使用時間
0.0%si : ソフトウェア割込み要求での使用時間
0.0%st : OS仮想化利用時に、ほかの仮想CPUの計算で待たされた時間
ロードアベレージで負荷状況は把握できます。
そのため、監視する側は注意して見る機会は少ないと思います。
私自身も運用業務の際にこの部分を確認したことはないです。
メモリ/スワップ状態

メモリとスワップの状態になります。
解説すると下記になります。
KiB Mem
3882252 total : メモリの総容量
3276760 free : メモリの空き容量
275372 used : メモリの使用容量
330120 buff/cache : バッファとして利用されているメモリの容量
KiB Swap
4063282 total : スワップ領域の総容量
4063228 free : スワップ領域の空き容量
0 used : スワップ領域の使用容量
3364612 avail Mem : キャッシュとして利用されているメモリ容量
メモリ/スワップ領域の状態は運用業務の中では「top」コマンドで確認する機会は少ないです。
「free」コマンドで確認することが多いです。

こちらは参考程度に覚えていただければと思います。
後日、「free」についても解説します。
実行中プロセスの状態

実行中の各プロセスの状態を確認できます。
運用業務で主に確認する箇所はこちらとなります。
PID : プロセスのID
USER :プロセスを実行しているユーザー
%CPU : 各プロセスごとのCPU負荷
%MEM : 各プロセスごとのメモリ負荷
TIME+ : 各プロセスの実行時間
COMMAND : 各プロセスの名称
ロードアベレージやメモリ使用量でアラートを検知した場合にこちらを確認します。
上記の例の場合は、「kube-controller」が一番CPUの負荷が高いことが分かります。
プロセスのソート
topコマンドでは実行中プロセスのソートも可能です。
プロセスのソートについては下記のキーを同時押しで可能です。
CPU順 | Shift + p |
メモリー順 | Shift + m |
実行時間順 | Shift + t |
実行結果としてはこちらとなります。
〇CPU順

「kube-controller」のCPU負荷が一番高いことが分かります。
〇メモリ順

「kube-apiserver」のメモリ負荷が一番高いです。
〇実行時間順

「kube-controller」の実行時間が一番長いです。
このように実行中のプロセスを確認したい順番にソートすることが可能です。
運用業務をする上で確認頻度が高いポイントについて
実際の運用業務では「top」コマンドでこちらの情報について確認することが多いです。
実行中プロセスの負荷
サーバー全体のロードアベレージ
サーバー全体のメモリ負荷
特に実行中プロセスの負荷をこちらのコマンドを使用して確認することが多いです。
実行中プロセスの見方やソート方法については抑えておいた方が無難でしょう。
サーバー全体のロードアベレージ/メモリ負荷についての確認については、
「w」や「free」コマンドの方が使用する頻度が高いです。
最後に
今回はtopコマンドの使い方について解説しました。
こちらのコマンドでは業務をする上で実行中プロセスの負荷状態を確認することが多いです。
一つ一つ覚える必要はありませんが、実行中プロセスの負荷状態の確認方法だけでも抑えておくと業務に入り込みやすいです。
参考にして頂けると幸いです。
Twitterとnoteでも活動しております。(主にインフラエンジニア関連の発信)
確認して頂けると幸いです。
Twitter
https://twitter.com/satton6987
note
https://note.com/satton56874