みなさんこんにちは。
ディーネットのひよっこエンジニアの浜田です。
技術的なブログについては今回が初めてなので読みにくい部分があるかと思いますがご容赦下さい。
私は今サーバ構築や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分平均:0.24
- 5分平均:0.75
- 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行目以降にプロセスの一覧が表示されています。
- PID:プロセスID
- USER:実行ユーザ
- PR:プロセスの静的優先度
- NI:プロセスの相対優先度
- VIRT:プロセスの仮想メモリサイズ
- RES:プロセスの使用しているメモリ
- SHR:プロセスが使用している共有メモリ
- S: プロセスの状態
- %CPU:CPU使用率
- %MEM:実メモリ使用率
- TIME+:プロセスの実行時間
- 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(ネットワークの接続状態などを確認するコマンド)を
使ったり、出力されているログから調査をして原因を探したりします。
他コマンドの紹介についてはまたの機会に紹介しましょう。