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