topコマンドについて
どんなサービスでもサーバーの負荷については悩ましい問題が多いかと思われます。
どのプロセスが重いか死んでるプロセスが無いかなどので状況を確認するのに便利なコマンドで「top」コマンドというのがありますので今回まとめさせていただきます。
topコマンドとは
現在実行中のプロセスの負荷状況や実行時間などを確認できる便利なコマンドです。
実行結果はこちら
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
top - 10:23:42 up 121 days, 7:37, 1 user, load average: 2.20, 1.87, 1.99 Tasks: 638 total, 1 running, 637 sleeping, 0 stopped, 0 zombie %Cpu(s): 2.6 us, 0.6 sy, 0.0 ni, 96.6 id, 0.0 wa, 0.0 hi, 0.2 si, 0.0 st KiB Mem : 98733816 total, 3528484 free, 18601296 used, 76604032 buff/cache KiB Swap: 10240000+total, 10232384+free, 76156 used. 68638768 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 12282 aaaaaaa+ 20 0 519232 52432 38404 S 19.5 0.1 0:00.59 php-fcgi7.0 12251 bbbbbbb+ 20 0 3734284 97480 58808 S 17.9 0.1 0:01.09 php-fpm 11232 aaaaaaa+ 20 0 494552 92464 60364 S 11.6 0.1 1:27.37 php-fcgi5.6 19098 bbbbbbb+ 20 0 556216 106432 55684 S 8.6 0.1 0:03.88 php-fcgi7.0 25364 bbbbbbb+ 20 0 614052 97800 62564 S 6.6 0.1 0:07.01 php-fcgi7.2 12275 bbbbbbb+ 20 0 529808 54824 41012 S 6.3 0.1 0:00.88 php-fcgi7.0 11234 ccccccc+ 20 0 513832 57264 37276 S 5.3 0.1 0:55.91 php-fcgi7.4 12274 ccccccc+ 20 0 3987408 47356 26944 S 4.3 0.0 0:00.13 php-fpm 4729 ccccccc+ 20 0 544944 88940 58600 S 3.3 0.1 0:10.95 php-fcgi7.0 10829 apache 20 0 2277384 456892 55212 S 2.3 0.5 0:41.95 httpd 10831 apache 20 0 2269192 368388 29840 S 2.0 0.4 0:16.32 httpd 12285 eeeeeeee 20 0 459932 20276 14192 S 2.0 0.0 0:00.06 php-fcgi5.6 10828 apache 20 0 2273288 412456 43444 S 1.7 0.4 0:23.68 httpd 12687 nginx 20 0 4618788 1.2g 14688 S 1.7 1.2 0:25.23 nginx 25444 root 20 0 162796 3028 1672 S 1.3 0.0 5:20.94 top 4606 root 20 0 143264 2464 1520 S 1.0 0.0 264:44.77 authdaemond 12281 ddddddd+ 20 0 162644 2840 1592 R 1.0 0.0 0:00.06 top 12721 nginx 20 0 4651556 1.1g 13772 S 1.0 1.2 0:12.68 nginx 161 root 20 0 0 0 0 S 0.7 0.0 163:04.86 ksoftirqd/30 510 root 20 0 187272 116604 116240 S 0.7 0.1 954:10.76 systemd-journal 4602 root 20 0 143264 2484 1532 S 0.7 0.0 264:09.80 authdaemond 4950 root 39 19 163204 6848 1136 S 0.7 0.0 0:00.89 rsync 10827 apache 20 0 568020 241152 1504 S 0.7 0.2 0:05.93 httpd 10830 apache 20 0 2274144 384868 47916 S 0.7 0.4 0:18.34 httpd 12277 aaaaaaa+ 20 0 3717976 51396 31624 S 0.7 0.1 0:00.36 php-fpm 6 root 20 0 0 0 0 S 0.3 0.0 194:24.58 ksoftirqd/0 9 root 20 0 0 0 0 S 0.3 0.0 817:33.27 rcu_sched 151 root 20 0 0 0 0 S 0.3 0.0 288:12.07 ksoftirqd/28 1088 root 20 0 740456 66448 63716 S 0.3 0.1 637:59.22 rsyslogd 11794 nginx 20 0 4602404 1.2g 9900 S 0.3 1.2 0:06.42 nginx 11833 nginx 20 0 4606500 1.2g 10628 S 0.3 1.2 0:07.94 nginx 11893 nginx 20 0 4602404 1.2g 10708 S 0.3 1.2 0:08.69 nginx 17907 postfix 20 0 90748 4952 3000 S 0.3 0.0 14:34.26 anvil |
様々なプロセスが立ち動作していますね!
今回は共用サーバで実行したため凄い数のプロセス数になっております!
では一番上の列から説明していきます。
load average(1列目)
システム全体の負荷状況を表す指標が確認できる
1 2 |
top - 10:23:42 up 121 days, 7:37, 1 user, load average: 2.20, 1.87, 1.99 現在時間 サーバーの稼働時間 ログインユーザ数 1分,5分,15分間の待ちタスク数 |
load averageについては他にもuptime/wコマンドがあります
●uptime
システムの稼働時間を見るコマンド
1 2 |
$ uptime 10:27:52 up 121 days, 7:41, 1 user, load average: 2.24, 1.96, 1.98 |
●w
サーバーに誰がログインしているかと、何を実行しているかを確認できる
1 2 3 4 |
$ w 10:27:26 up 121 days, 7:41, 1 user, load average: 2.56, 1.99, 1.99 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT iderin pts/0 59-168-175-161.r 23:43 6.00s 0.04s 0.01s w |
Tasks(2列目)
各タスクの状態を数値で確認できる
1 |
Tasks: 638 total, 1 running, 637 sleeping, 0 stopped, 0 zombie |
- total : 合計のタスク数
- running : 稼働中のタスク数
- sleeping : 待機中のタスク数
- stopped : 停止中のタスク数
- zombie : ゾンビのタスク数
※ ゾンビプロセスとは、プロセスが既に終了しており実態は消滅しているのに、
プロセステーブルに残ってしまっている状態のことを指します。
CPU(3列目)
1 |
%Cpu(s): 3.1 us, 0.7 sy, 0.0 ni, 96.0 id, 0.1 wa, 0.0 hi, 0.1 si, 0.0 st |
- us : ユーザプロセスの実行された時間のパーセンテージ
- sy : システムプロセスの使用時間のパーセンテージ
- ni : nice等の実行優先度を変更したプロセス使用時間のパーセンテージ
- id : アイドル状態のプロセス時間のパーセンテージ
- wa : I/Oの終了待ちをしていたプロセス時間のパーセンテージ
- hi : ハードウェアの割込み要求での使用時間のパーセンテージ
- si : ソフトウェアの割込み要求での使用時間のパーセンテージ
- st : OS仮想化利用時に他のCPUの実行時間のパーセンテージ
Memory(4列目)
物理メモリの使用状況の確認
1 |
KiB Mem : 98733816 total, 6551972 free, 18760400 used, 73421440 buff/cache |
- total : 物理メモリの総容量
- free : 物理メモリの空き容量
- used : 物理メモリの使用容量
- buff/cache :バッファやキャッシュ(ファイルキャッシュ)として使用しているメモリ量
→他アプリでメモリが必要となった場合はこの領域が使われる
ようはメモリ空いてるから使うけど、他で使うことになったら解放して使えるようにしますね!
的な解釈でいいかと思います。
Swap Memory(5列目)
スワップ領域の使用状況の確認
1 |
KiB Swap: 10240000+total, 10232345+free, 76544 used. 69464000 avail Mem |
- total : スワップ領域の総容量
- free : スワップ領域の空き容量
- used : スワップ領域の使用容量
- avail Mem : こちらはswap memoryの列に記載されていて紛らわしいのですが
swapとは関係なくキャッシュなどを解放することで利用可能なメモリ量
プロセス
1 |
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND |
-
PID(Process ID): タスクの一意なプロセスID
-
USER : タスクの実効ユーザー名
-
PR(Priority): タスクの優先度で高い数値ほど優先される。rt(real time)となっている場合は 最優先で実行
-
NI(Nice value): タスクのnice値。負のnice 値は高い優先度を意味し、正のnic 値は低い優先度を意味する
-
VIRT(Virtual Image): タスクが使用している仮想メモリの総量。スワップも含む
-
RES(Resident Memory Size):スワップを含まない、物理メモリの消費量
-
SHR(Shared Mem size):タスクが利用している共有メモリの総量
-
S(Process Status):
・D:割り込み不可能なスリープ状態
・R:実行中
・S:スリープ状態
・T:トレース中/停止された
・Z:ゾンビ -
%CPU : 前回の更新(topのリロード前後の差分)からの、タスクの所要 CPU 時間の占有率。 総 CPU 時間のパーセンテージで表される
-
%MEM : タスクが現在使用している利用可能な物理メモリの占有率。
-
TIME+ : タスクが開始してから利用した CPU 時間の総計
-
COMMAND : タスクを開始するのに使ったコマンドライン、 またはタスクに関連づけられたプログラムの名前を表示
その他
●c(コマンドの詳細情報表示)
COMMANDの詳細を確認する場合は[c]を実行すると詳細な実行コマンドが表示されます。
バッチ処理なども省略して表示されていると何のバッチが動いているのかが
分からないのですが、詳細情報にすると実際実行されたコマンドが表示されるのでお勧めです。
1 2 3 4 5 6 |
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 3782 root 20 0 154684 34900 1128 R 99.7 0.0 0:03.02 find . -type f -name *timestamp -mmin -15 5538 aaaaaaa+ 20 0 596924 60328 43704 S 29.4 0.1 0:00.89 /usr/bin/php-fcgi7.2 -c /home/aaaaaaa/xserver_php/php.ini 31601 bbbbbbb+ 20 0 491748 102932 64440 S 10.2 0.1 0:03.20 /usr/bin/php-fcgi5.6 -c /home/bbbbbbb/server_php/php.ini 3668 ccccc 20 0 305460 37776 4588 S 7.3 0.0 0:00.29 /usr/bin/perl ./action.cgi 7833 aaaaaaa 20 0 514912 33436 24268 R 5.9 0.0 0:00.18 /usr/bin/php-fcgi7.0 -c /home/aaaaaaa/xserver_php/php.ini |
●L(文字列を検索)
プロセス内にあるワード全てに対して文字列検索できます
●u(ユーザー名を検索)
プロセス内のUSERを検索できます
●k(プロセスを終了)
プロセスを終了させるコマンドにkillコマンドがありますが
それをTOPコマンドで表示中に実行できます。
●Shift + p, Shift + m, Shift + r, <, >(ソート関連)
-
Shift + p(デフォルトの表示順はこちら)
CPU使用率でソートする -
Shift + m
メモリ使用率でソートする -
Shift + r
現在ソートしている項目の、昇順降順を切り替える -
<
現在ソートしている左の列をソートする -
>
現在ソートしている右の列をソートする
●1(コア数ごとの使用率)
%Cpu(s)は複数のコアを1つにまとめて表示されているので
1つ1つのCPUの状態を確認する場合に使用できます。
1 2 3 4 5 6 7 8 9 10 11 12 |
top - 18:33:20 up 25 days, 13:34, 1 user, load average: 21.17, 19.41, 16.86 Tasks: 230 total, 1 running, 229 sleeping, 0 stopped, 0 zombie %Cpu0 : 6.3 us, 25.3 sy, 0.0 ni, 68.3 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st %Cpu1 : 19.3 us, 39.5 sy, 0.0 ni, 40.9 id, 0.0 wa, 0.0 hi, 0.3 si, 0.0 st %Cpu2 : 8.7 us, 29.7 sy, 0.0 ni, 61.0 id, 0.0 wa, 0.0 hi, 0.7 si, 0.0 st %Cpu3 : 5.0 us, 48.3 sy, 0.0 ni, 46.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st %Cpu4 : 12.0 us, 32.8 sy, 0.0 ni, 55.2 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st %Cpu5 : 4.3 us, 39.9 sy, 0.0 ni, 55.8 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st %Cpu6 : 8.4 us, 31.4 sy, 0.0 ni, 59.5 id, 0.3 wa, 0.0 hi, 0.3 si, 0.0 st %Cpu7 : 4.3 us, 51.5 sy, 0.0 ni, 44.1 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st %Cpu8 : 15.7 us, 31.8 sy, 0.0 ni, 52.1 id, 0.0 wa, 0.0 hi, 0.3 si, 0.0 st |
topコマンドはサーバー負荷で見るのに大事になるので
意味合いは覚えていきたいところですね!
ありがとうございました!