障害対応時に使用するコマンドのまとめ
『インフラエンジニアの教科書2』P178~P180に、障害時によく使うコマンドがまとめられています。
絶対忘れそうなのと、自分なりにカテゴリ分け・オプションを足したほうが分かりやすかったのでまとめてみました。
一度まとめてみると理解が深まるため、読むだけではなく手を動かしてみることをおすすめします。
コマンドいっぺんに流したほうが楽だし、漏れなくてよさそうなので、シェルを書いてみました:IncCheck
メモリの情報(総量・使用率)
freeおよび、後述するtopコマンドにて状況確認可能
# free ### メモリの使用率表示
total used free shared buffers cached
Mem: 7784672 7472748 311924 60392 15708 1965000
-/+ buffers/cache: 5492040 2292632
Swap: 8388604 306092 8082512
CPUの情報(種類・コア数・使用率)
# cat /proc/cpuinfo | grep -e "model name" -e cores ### CPU情報
model name : Intel(R) Core(TM) i7-5600U CPU @ 2.60GHz
cpu cores : 2
model name : Intel(R) Core(TM) i7-5600U CPU @ 2.60GHz
cpu cores : 2
model name : Intel(R) Core(TM) i7-5600U CPU @ 2.60GHz
cpu cores : 2
model name : Intel(R) Core(TM) i7-5600U CPU @ 2.60GHz
cpu cores : 2
wコマンドの最初の行は「現在時刻、システム稼働時間、ログインユーザ数、システムの平均負荷(1分、5分、15分)」
このコマンドで現在のログインユーザーも確認できる。
# w ### CPU使用率・ログインユーザー
21:54:03 up 3 days, 10:35, 3 users, load average: 0.01, 0.11, 0.14
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
hoge tty1 :0 Mon11 3days 7:39 0.17s pam: gdm-passwo
hoge pts/0 :0.0 Mon12 0.00s 0.32s 27.19s gnome-terminal
hoge pts/3 :0.0 21:28 3:07 0.01s 0.01s bash
# top -d 1 ### CPU使用率・使用プロセス等
top - 21:54:10 up 3 days, 10:35, 3 users, load average: 0.01, 0.11, 0.14
Tasks: 277 total, 2 running, 272 sleeping, 0 stopped, 3 zombie
Cpu(s): 7.5%us, 4.3%sy, 0.0%ni, 88.0%id, 0.0%wa, 0.3%hi, 0.0%si, 0.0%st
Mem: 7784672k total, 7521924k used, 262748k free, 17832k buffers
Swap: 8388604k total, 306040k used, 8082564k free, 1986068k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
22507 hoge 20 0 2509m 340m 52m S 14.9 4.5 11:24.96 firefox
3539 root 20 0 119m 1672 1212 S 1.0 0.0 0:40.55 smcd
3959 root 9 -11 8312 364 324 S 1.0 0.0 0:46.03 sav-limitcpu
4031 root 20 0 195m 30m 24m S 1.0 0.4 7:39.13 Xorg
4355 hoge 20 0 32472 1612 804 S 1.0 0.0 0:02.47 dbus-daemon
4541 hoge 20 0 317m 4688 3728 S 1.0 0.1 0:01.33 python
10145 hoge 20 0 343m 15m 8656 S 1.0 0.2 0:27.23 gnome-terminal
1 root 20 0 19364 1228 1000 S 0.0 0.0 0:04.23 init
2 root 20 0 0 0 0 S 0.0 0.0 0:00.10 kthreadd
3 root RT 0 0 0 0 S 0.0 0.0 0:03.23 migration/0
4 root 20 0 0 0 0 S 0.0 0.0 0:01.37 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:00.09 watchdog/0
19 root 20 0 0 0 0 S 0.0 0.0 0:08.84 events/0
ディスク情報(総量・使用率・アクセス状況・RAID)
# df -h ### ディスク使用率表示
Filesystem Size Used Avail Use% Mounted on
tmpfs 3.8G 2.4M 3.8G 1% /dev/shm
/dev/sda1 969M 86M 833M 10% /boot
# iostat 1 ### ディスクアクセス
Linux 2.6.32-696.10.2.el6.x86_64 2018年05月03日 _x86_64_ (4 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
28.04 0.02 31.96 0.24 0.00 39.74
Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn
sda 18.60 559.34 243.65 166387494 72479848
dm-0 44.74 559.29 243.63 166372930 72473144
dm-1 43.05 554.11 235.65 164832098 70099656
dm-2 1.64 5.17 7.98 1539320 2373488
(以下略)
RAIDについて確認するコマンドとして、MegaCliコマンド・hpssacliコマンドが紹介されていましたが……。
やだ……私の管理システムMegaCli入ってないしHPでもない……! そこで一般的に確認できる方法を書いておくことに。
# cat /proc/mdstat
Personalities :
unused devices: <none>
RAID組んでいる場合のケースはこちら。1
# cat /proc/mdstat
Personalities : [raid1]
md0 : active raid1 sdb1[0] sda1[1]
1052160 blocks [2/2] [UU]
md1 : active raid1 sdb2[0] sda2[1]
1052160 blocks [2/2] [UU]
md2 : active raid1 sdb3[0] sda3[1]
242091392 blocks [2/2] [UU]
unused devices:
※ディスク障害時は[2/2] [UU]
の表示が[2/1] [_U]
のように変化。「_」(アンダースコア)表示パーティションが動作していないため、交換対応が必要。注釈2の記事が障害発見から交換まで分かりやすくまとまっていて参考になります。
接続状況
netstatが定番。wcしてからgrepで更に絞って詳細見たほうが、滝みたいに出力結果が流れなくておすすめ。
# netstat -an | grep ESTABLISHED | wc -l ### 張られているTCPコネクションの数
5
# netstat -an | grep ESTABLISHED ### 張られているTCPコネクションの種類
tcp 0 0 127.0.0.1:5900 127.0.0.1:57990 ESTABLISHED
tcp 0 0 127.0.0.1:5900 127.0.0.1:57980 ESTABLISHED
tcp 0 0 127.0.0.1:57990 127.0.0.1:5900 ESTABLISHED
tcp 0 0 127.0.0.1:57978 127.0.0.1:5900 ESTABLISHED
tcp 0 0 127.0.0.1:57982 127.0.0.1:5900 ESTABLISHED
(以下略)
lastコマンドで最近のログインの状況が見られる。「現在ログインしているユーザー」はwコマンドで見れるため、lessなどに渡して、直近のログインの状況も見ておくとよい場合もある。
# last | less
hoge pts/3 :0.0 Thu May 3 21:28 still logged in
hoge tty1 :0 Thu Apr 5 22:13 - down (9+21:38)
reboot system boot 2.6.32-696.10.2. Thu Apr 5 22:13 - 19:52 (9+21:38)
hoge pts/0 :0.0 Fri Mar 30 11:39 - crash (6+10:34)
hoge tty1 :0 Fri Mar 30 11:36 - crash (6+10:37)
(以下略)
サーバが起動してからの経過時間
uptimeコマンド3が推奨されていたが、wコマンドやtopコマンドでまかなえる。読み方は「現在時刻、システム稼働時間、ログインユーザ数、システムの平均負荷(1分、5分、15分)」
# uptime
21:57:40 up 3 days, 10:39, 3 users, load average: 0.21, 0.23, 0.18
動いているWebサーバーソフトウェアの状態を確認する
ポート80の通信状況と、ポート80を使っているプロセスを表示させる。80の前にセミコロンつけたほうが出力結果絞れていいかな。
※ポート80を使っていない製品や設定もありうるので、参考程度に
# netstat -lnp | grep -e :80 ### ポート80で通信しているプロセス
# netstat -lnp | grep -e :80 | grep -o '[0-9]*/' | grep -o [0-9]* | sort | uniq | xargs ps -p
### ポート80を使っているプロセスの状況表示
メモリ・HDD・電源ユニットの不具合
dmesgコマンドを使う。量が多いため、errorやfailなどのワードで検索するとよい。
また、/var/log/messagesにエラーメッセージが出ている場合もあるため、合わせて検索。
# dmesg | grep -i -e error -i -e fail
ACPI Error (psparse-0537): Method parse/execution failed [\_SB_.LID_._PSW] (Node ffff88024c876880), AE_TIME
# less /var/log/messages
(ログ抜粋)
May 3 12:57:00 xxxxxxxxxx kernel: ACPI Error (psparse-0537): Method parse/execution failed [\_SB_.LID_._PSW] (Node ffff88024c876880), AE_TIME
May 3 12:57:00 xxxxxxxxxx kernel: ACPI: _PSW execution failed
この場合は、ACPI テーブルが正しくないため、電源管理制御と、PCI root ブリッジの計数データに関連する BIOS エラーがある4
USB接続の有無
上記dmesgの他、partedコマンド、lsusbコマンドで確認。
# parted -l
モデル: ATA SPCC Solid State (scsi)
ディスク /dev/sda: 480GB
セクタサイズ (論理/物理): 512B/512B
パーティションテーブル: msdos
番号 開始 終了 サイズ タイプ ファイルシステム フラグ
1 1049kB 1050MB 1049MB primary ext4 boot
2 1050MB 480GB 479GB primary
(以下略)
lsusbコマンドはオプション-tで階層構造表示&最大通信速度が表示されるため、そちらも分かりやすい。5
(USB1.1:12Mbps USB2.0:480Mbps USB3.0:5000Mbps)
# lsusb
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 002: ID 8087:8001 Intel Corp.
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 003 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 002 Device 002: ID 04f3:0301 Elan Microelectronics Corp.
Bus 002 Device 003: ID 138a:0017 Validity Sensors, Inc. Fingerprint Reader
Bus 002 Device 004: ID 8087:0a2a Intel Corp.
Bus 002 Device 005: ID 04f2:b449 Chicony Electronics Co., Ltd
# lsusb -t
/: Bus 03.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/4p, 5000M
/: Bus 02.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/11p, 480M
|__ Port 1: Dev 6, If 0, Class=hub, Driver=hub/4p, 12M
|__ Port 3: Dev 7, If 0, Class=HID, Driver=usbhid, 1.5M
|__ Port 3: Dev 7, If 1, Class=HID, Driver=usbhid, 1.5M
|__ Port 5: Dev 2, If 0, Class=HID, Driver=usbhid, 12M
|__ Port 6: Dev 3, If 0, Class=vend., Driver=, 12M
|__ Port 7: Dev 4, If 0, Class='bInterfaceClass 0xe0 not yet handled', Driver=btusb, 12M
|__ Port 7: Dev 4, If 1, Class='bInterfaceClass 0xe0 not yet handled', Driver=btusb, 12M
|__ Port 8: Dev 5, If 0, Class='bInterfaceClass 0x0e not yet handled', Driver=uvcvideo, 480M
|__ Port 8: Dev 5, If 1, Class='bInterfaceClass 0x0e not yet handled', Driver=uvcvideo, 480M
/: Bus 01.Port 1: Dev 1, Class=root_hub, Driver=ehci_hcd/3p, 480M
|__ Port 1: Dev 2, If 0, Class=hub, Driver=hub/8p, 480M