Linuxサーバーを保守する上で、障害等のトラブル発生時に速やかにかつ正確に今起きていることを把握する必要があります。
Linuxでは、コマンドを使ってサーバーを様々な角度から観察することができます。
CPUなど各種リソースの負荷状態 | サーバーが重いなどの状況になったときに確認する。 |
---|---|
プロセスの状態 | サーバー負荷が上がっている原因を調査するときに確認する。 |
ネットワークカードの状態 | ネットワークにつながらないといった問題の原因を調査するときに確認する。 |
ログ | サーバーが正しく動作しているか状態を確認したときや、動作がおかしいときに確認する。 |
ロードアベレージを確認する
サーバーのCPUの負荷を見るには、wコマンドやuptimeコマンド、topコマンドなどを利用します。
これらのコマンドが表示する「ロードアベレージ」を見ると、サーバーにかかっている負荷を見ることができます。
# uptime 23:35:32 up 1:09, 2 users, load average: 0.00, 0.01, 0.05
Linuxでは、CPUの負荷はこのロードアベレージという数値を目安にします。
ロードアベレージは、CPUやI/Oを必要としている(psコマンドでSTATが「R」や「D」と表示されている)プロセスの数の平均値です。例えば、ひとつのプロセスが暴走してしまい、常にCPUを必要としてしまうと、そのプロセスのためにロードアベレージが1増え、サーバーに負荷がかかったことになります。
簡単な目安としては、CPU(最近ではコア)がひとつの場合はロードアベレージが1を超えるとサーバーは忙しい状態で、1未満であればCPUの負荷に関してはまず問題ないといえます。ロードアベレージがむやみに上がっている場合は、何かのプロセスが暴走していると考えるべきです。プロセスが暴走してロードアベレージが上がっているときは、管理者が判断して終了させる必要があります。
特にユーザーが作ったCGIプロセスが暴走してロードアベレージが上がってしまうことは、それほど珍しいことではありません。
プロセスの状態を見る
uptimeやwコマンドでCPUに負荷がかかっていることが確認できたら、次はどのプロセスが負荷をかけているかを探し、もし暴走しているようなら、killコマンドでプロセスを終了させる必要があります。
プロセスの状態は、psコマンドやtopコマンドで見ることができます。
psコマンド
aは自分以外のユーザーのプロセスを表示するオプション
xはデーモンなどのプロセスを表示するオプション
uはユーザー名など詳細を表示するオプション
# ps axu USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.7 44516 7108 ? Ss 22:26 0:01 /usr/lib/syste ~ 省略 ~ root 1373 0.0 1.6 553060 16300 ? Ssl 22:26 0:00 /usr/bin/pytho postgres 1842 0.0 1.5 338000 15416 ? S 22:26 0:00 /usr/pgsql-9.5 postgres 2318 0.0 0.1 190868 1368 ? Ss 22:26 0:00 postgres: logg postgres 2460 0.0 0.1 338000 1744 ? Ss 22:26 0:00 postgres: chec postgres 2461 0.0 0.2 338000 2552 ? Ss 22:26 0:00 postgres: writ postgres 2462 0.0 0.1 338000 1516 ? Ss 22:26 0:00 postgres: wal postgres 2463 0.0 0.2 338428 2668 ? Ss 22:26 0:00 postgres: auto postgres 2464 0.0 0.1 192984 1736 ? Ss 22:26 0:00 postgres: stat ~ 省略 ~ postfix 2519 0.0 0.3 91228 3888 ? S 22:26 0:00 pickup -l -t u postfix 2520 0.0 0.3 91296 3912 ? S 22:26 0:00 qmgr -l -t uni root 2536 0.0 0.2 115372 2032 tty1 Ss+ 22:32 0:00 -bash
表示 | 説明 |
---|---|
USER | 実行しているユーザー名 |
PID | プロセスの番号 |
%CPU | CPUの利用率 |
%MEM | メモリーの利用率 |
VSZ/RSS | 利用しているメモリのサイズ |
TTY | 標準入力や標準出力に使われる端末の名前 |
STAT | プロセスの状態※ |
START | プロセスが開始された時刻 |
TIME | CPUを利用した時間 |
COMMAND | コマンドの名前 |
psコマンドのSTATや%CPU、%MEMの欄を観察して、常にSTATが「R」(CPUを必要としている)の状態だったり、ずっとCPU利用率が99%になっていたり、メモリー利用率が異常に増大しているプロセスは、暴走している可能性があります。
プロセスの状態を監視する
topコマンドを使うと、プロセスの状態を監視できます。topコマンドを起動すると、3秒おきに画面が更新され、CPU使用率が大きい順でプロセスの情報が表示されます更新間隔や表示内容、ソート方法は動作中の操作や設定ファイルが変更できます。終了するときには「q」キーを押します。
ネットワークカードの状態を見る
ipコマンドを使うと、ネットワークカードの状態を見ることができます。MACアドレス(ネットワークカード自身の番号)やカードに割り当てているIPアドレス、イーサネットのコリジョン(通信の衝突)の数、通ったパケットの数、ハードウェアの情報などを観察できます。
# ip -s addr 1: lo:mtu 65536 qdisc noqueue state UNKNOWN link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever RX: bytes packets errors dropped overrun mcast 255985 722 0 0 0 0 TX: bytes packets errors dropped carrier collsns 255985 722 0 0 0 0 2: eno16777736: mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 00:0c:29:27:fe:8a brd ff:ff:ff:ff:ff:ff inet 172.16.0.50/24 brd 172.16.0.255 scope global eno16777736 valid_lft forever preferred_lft forever inet6 fe80::20c:29ff:fe27:fe8a/64 scope link valid_lft forever preferred_lft forever RX: bytes packets errors dropped overrun mcast 355757 3701 0 0 0 0 TX: bytes packets errors dropped carrier collsns 131802 661 0 0 0 0