サーバの負荷状況を確認するコマンド

みなさんこんにちは。
ディーネットのひよっこエンジニアの浜田です。
技術的なブログについては今回が初めてなので読みにくい部分があるかと思いますがご容赦下さい。
私は今サーバ構築やP2Vを行うチームに所属しておりますが、以前はサーバの<
トラブルシューティングを行っておりましたので、その際に利用していたサーバの
状況を調査するコマンドについて少しご紹介したいと思います。

【w】

負荷状況の調査を行うとき、個人的に真っ先に利用するコマンド候補①です。
ログインしているユーザとそのユーザの実行している内容を表示します。
実行例は以下の通り。

# w
=========================================================================
13:59:34 up 19 days,  1:44,  2 users,  load average: 0.24, 0.75, 0.67
USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU WHAT
root     pts/0    192.168.10.106   12:33    0.00s  1.00s  0.01s w
denet    pts/1    192.168.10.106   11:21    4:57   0.13s  0.13s -bash
=========================================================================

1行目には現在時刻、サーバの稼働時間、ログインユーザ数、1,5,15分前の
LoadAverageが表示されます。
2~4行目にはログイン名、端末名、リモートホスト名、ログイン時刻、アイドル時間、
JCPU、PCPU、実行している内容が表示されています。
今回の実行結果を読み解くと、現在は 11時27分、サーバの稼働時間は 19日と1時間44分、
ログインユーザは 2人、LoadAverageは

  1. 1分平均:0.24
  2. 5分平均:0.75
  3. 15分平均:0.67

であることが分かります。
また、rootユーザが 12時33分 に 192.168.10.106 から接続していることが分かります。
wコマンドはサーバで何か作業をする際に他ユーザが作業をしていないか確認するために使うことが
多いですが、現在のLoadAverageやサーバの稼動期間等も確認できるので何かと便利です。

【top】

負荷状況の調査を行うとき、個人的に真っ先に利用するコマンド候補②です。
Linuxのタスクを表示するコマンドです。
実行例は以下の通り。(ちょっと実行結果が長いので一部省略しています。)

# top
=========================================================================
top - 14:00:01 up 19 days,  1:44,  2 users,  load average: 0.16, 0.69, 0.66
Tasks: 104 total,   1 running, 103 sleeping,   0 stopped,   0 zombie
Cpu(s):  0.0%us,  0.3%sy,  0.0%ni, 99.7%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:   1020024k total,   767140k used,   252884k free,     3180k buffers
Swap:  1675260k total,   134952k used,  1540308k free,    20836k cached
PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
1543 mysql     20   0  387m 1872  360 S  0.3  0.2   6:35.51 mysqld
1617 root      20   0 2236m  10m 1416 S  0.3  1.0  32:47.01 java
20470 root      20   0 15032 1228  940 R  0.3  0.1   0:00.04 top
1 root      20   0 19352  300  296 S  0.0  0.0   0:02.14 init
2 root      20   0     0    0    0 S  0.0  0.0   0:00.00 kthreadd
3 root      RT   0     0    0    0 S  0.0  0.0   0:00.00 migration/0
4 root      20   0     0    0    0 S  0.0  0.0   0:03.94 ksoftirqd/0
5 root      RT   0     0    0    0 S  0.0  0.0   0:00.00 stopper/0
6 root      RT   0     0    0    0 S  0.0  0.0   0:03.57 watchdog/0
7 root      20   0     0    0    0 S  0.0  0.0  12:28.34 events/0
8 root      20   0     0    0    0 S  0.0  0.0   0:00.00 events/0
9 root      20   0     0    0    0 S  0.0  0.0   0:00.00 events_long/0
10 root      20   0     0    0    0 S  0.0  0.0   0:00.00 events_power_ef
=========================================================================

一番上の行はwコマンドの時と同じ内容なので省略します。
2行目からは総タスク数や実行中タスク数、待機中タスク数やゾンビとなっているタスクの数が分かるように
なっており、3行目からはCPUの使用率、メモリやSWAPの使用率を表示しています。
7行目以降にプロセスの一覧が表示されています。

  1. PID:プロセスID
  2. USER:実行ユーザ
  3. PR:プロセスの静的優先度
  4. NI:プロセスの相対優先度
  5. VIRT:プロセスの仮想メモリサイズ
  6. RES:プロセスの使用しているメモリ
  7. SHR:プロセスが使用している共有メモリ
  8. S: プロセスの状態
  9. %CPU:CPU使用率
  10. %MEM:実メモリ使用率
  11. TIME+:プロセスの実行時間
  12. COMMAND:プロセスで実行されているコマンド

こちらを確認すればどのようなプロセスが負荷をかけているかわかります。
なお、プロセスの状態がRになっているものが現在実行中のプロセスです。
topコマンドを実行した状態でリソースごとにソートしたい場合ですが、メモリ使用率したい場合は[SHIFT]+[M]、
CPU使用率したい場合は[SHIFT]+[P]でソートが出来ます。
ソートについては[F]を押すことで様々な項目でソートが出来るようになっているので
ぜひ一度確認してみて下さい。

【free】

システムの空きメモリと利用メモリの量を表示するコマンドです。
実行例は以下の通り。

# free
=========================================================================
total       used       free     shared    buffers     cached
Mem:       1020024     767124     252900          4       3188      20836
-/+ buffers/cache:     743100     276924
Swap:      1675260     134924    1540336
=========================================================================

何もオプションなしで実行した場合はキロバイト表記です。mオプションをつけるとメガバイト表記になります。
1行目には使用量(used)と空き容量(free)、バッファやキャッシュを表示しています。共有メモリは古い機能の
名残らしいので無視です。
2行目からはメモリとスワップメモリそれぞれの利用状況や空き状況を表示しています。
なお、2行目のメモリ使用量にはバッファとキャッシュが含まれているので、実行しているプロセスによって
稼動しているメモリ量を確認したいときは3行目の「-/+ buffers/cache」の使用量を確認して下さい。

まとめ

ここで紹介したコマンドは調査の際に利用するコマンドの基本であり、調査の一部です。
そのため、紹介しているオプションなどもほんの一部です。
実際のトラブルシューティングの際は「top -i」のように実行中のプロセスのみ表示するオプションを利用したり、
psコマンド(実行中のプロセスを表示するコマンド)やnetstat(ネットワークの接続状態などを確認するコマンド)を
使ったり、出力されているログから調査をして原因を探したりします。
他コマンドの紹介についてはまたの機会に紹介しましょう。

返信を残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA