はじめに
こんにちは、普段マルチクラウドを利用しながら
インフラエンジニアをしているServer Campのキタです。
今回はLinuxサーバーでアラームが発生した際の障害の原因と、調査によく利用するコマンドをまとめた記事を書きたいと思います。
主にCPU、メモリ、ディスクの障害について書きます。
環境
基本的に、以下環境で試したものを記載しています。
$ cat /etc/os-release
NAME="AlmaLinux"
VERSION="9.4 (Seafoam Ocelot)"
ID="almalinux"
ID_LIKE="rhel centos fedora"
01. CPU負荷(CPU, load avg)
CPU Load Averageは、特定の時間間隔(通常は1分、5分、15分)のCPUの負荷を示す指標になります。
この負荷は、実行中のプロセスの平均数が計算されます。
つまり、システムがどれだけ忙しいかを定量的に示す数値になります。
この障害の原因はいくつか考えられますが、Webサーバーなどどあれば以下の原因で発生しているパターンが多いかと思います。
■障害時の調査に使用するコマンド
$ top
Tasks: 134 total, 1 running, 133 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.2 us, 0.5 sy, 0.0 ni, 98.7 id, 0.0 wa, 0.2 hi, 0.0 si, 0.5 st
MiB Mem : 1909.8 total, 803.7 free, 804.9 used, 450.6 buff/cache
MiB Swap: 0.0 total, 0.0 free, 0.0 used. 1104.9 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
926 mysql 20 0 1741788 423684 33792 S 0.7 21.7 1:38.13 mysqld
3849 ec2-user 20 0 10600 4096 3328 R 0.3 0.2 0:00.01 top
1 root 20 0 170596 13184 9984 S 0.0 0.7 0:02.62 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd
3 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 rcu_gp
4 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 rcu_par_gp
5 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 slub_flushwq
6 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 netns
8 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 kworker/0:0H-events_highpri
10 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 mm_percpu_wq
12 root 20 0 0 0 0 I 0.0 0.0 0:00.00 rcu_tasks_kthre
13 root 20 0 0 0 0 I 0.0 0.0 0:00.00 rcu_tasks_rude_
14 root 20 0 0 0 0 I 0.0 0.0 0:00.00 rcu_tasks_trace
15 root 20 0 0 0 0 S 0.0 0.0 0:00.04 ksoftirqd/0
16 root 20 0 0 0 0 S 0.0 0.0 0:00.59 pr/ttyS0
17 root 20 0 0 0 0 S 0.0 0.0 0:00.46 pr/tty0
18 root 20 0 0 0 0 I 0.0 0.0 0:00.52 rcu_preempt
topコマンドは実行中のプロセスやリソース状況をリアルタイムで表示してくれる便利なコマンドです。
CPU使用率やメモリ・SWAP等指定の項目順に並べ替えることが可能で、抜ける時は 「q」もしくは「Ctrl+c」を実行すると抜けることが出来ます。
オプションはこちら↓
オプション | 意味 |
---|---|
-c | 実行されているコマンドの詳細情報を表示 |
1 | CPUコア毎の使用率等の情報を表示 |
-O | プロセスの並び順を任意のフィールドに変更 |
-f,-o | フィールドの追加、削除が可能 |
topコマンドの解説は以下の通りです。
むちゃくちゃ情報が多いですが、覚えておくと様々な情報を瞬時に得ることが出来ます。
02. メモリ負荷
メモリ障害の発生原因の理由は様々ですが、
Webサーバー、DBサーバーの場合は以下のパターンをよく見ます。
■障害時の調査に使用するコマンド
$ free -m
total used free shared buff/cache available
Mem: 1909 791 815 8 451 1118
Swap: 0 0 0
$ top
#ここで「shift+M」でメモリ純に並び替えて確認をする
top - 09:38:58 up 7:22, 1 user, load average: 0.00, 0.00, 0.05
Tasks: 135 total, 1 running, 134 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.5 us, 0.0 sy, 0.0 ni, 98.6 id, 0.0 wa, 0.5 hi, 0.0 si, 0.5 st
MiB Mem : 1909.8 total, 815.7 free, 791.6 used, 451.9 buff/cache
MiB Swap: 0.0 total, 0.0 free, 0.0 used. 1118.2 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
926 mysql 20 0 1741788 423684 33792 S 0.0 21.7 1:43.20 mysqld
566 root 20 0 185508 28628 20352 S 0.0 1.5 0:01.02 php-fpm
570 root 20 0 257220 28252 13312 S 0.0 1.4 0:04.19 tuned
825 polkitd 20 0 2578316 26936 18560 S 0.0 1.4 0:00.10 polkitd
890 root 20 0 1759156 25284 10880 S 0.0 1.3 0:00.80 amazon-ssm-agen
1493 apache 20 0 1443532 23388 10496 S 0.0 1.2 0:03.89 httpd
554 root 20 0 259132 21992 17024 S 0.0 1.1 0:00.72 NetworkManager
619 apache 20 0 1443532 19364 10368 S 0.0 1.0 0:04.57 httpd
618 apache 20 0 1574536 19060 9984 S 0.0 1.0 0:04.76 httpd
620 apache 20 0 1443400 18468 10112 S 0.0 0.9 0:04.50 httpd
562 root 20 0 23544 15460 12260 S 0.0 0.8 0:01.12 httpd
609 apache 20 0 187528 13980 5632 S 0.0 0.7 0:00.00 php-fpm
freeコマンドはメモリとSWAPの使用量、空き容量を表示するコマンドです。
環境やバージョンによっては表示が変わってきます。
オプションはこちら↓
オプション | 意味 |
---|---|
-h | humanの略、人間に分かりやすい形に整形する |
-m | 表示結果をメガバイト単位で表示 |
-t | 列の合計を表示する |
-s | 一定間隔で出力する |
03. ディスク負荷
ディスク負荷の発生原因は特殊な場合を除いて主に以下の二つになるかと思います。
cron等で回しているバックアップ処理により一気に使用量が上がりアラームが鳴るパターンが多いですね。
■障害時の調査に使用するコマンド
$ df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 4.0M 0 4.0M 0% /dev
tmpfs 955M 0 955M 0% /dev/shm
tmpfs 382M 5.3M 377M 2% /run
/dev/nvme0n1p4 2.8G 1.9G 911M 68% /
/dev/nvme0n1p3 960M 115M 846M 12% /boot
/dev/nvme0n1p2 200M 7.1M 193M 4% /boot/efi
tmpfs 191M 0 191M 0% /run/user/1000
$ du -sch
108K .
108K total
dfコマンドはディスクの空き容量を表示するコマンドです。
続いてduコマンドはディスクの使用量をディレクトリごとに集計して表示するコマンドになります。
※duコマンドはサーバーに一時的に負荷がかかるため、他リソースの障害が一緒に発生している場合は気を付けてコマンドを実行しましょう。
dfコマンドオプションはこちら↓
オプション | 意味 |
---|---|
-h,-H | 人間にわかりやすい形に整形する |
-m | 表示結果をメガバイト単位で表示 |
-a | 全ファイルシステム容量表示 |
-T | ファイルタイプの表示 |
duコマンドの見方としては以下の通りです。
ルートディレクトリ以下から使用量が高くなっているディレクトリを、階層ごとに順番で探っていくのが良いかと思います。
最後に
最後までご覧いただきありがとうございました!
本記事が是非参考になりますと幸いです。
また、こちらの記事はServer Campから出しているUdemy講座から一部抜粋しました!
AWS を用いてLinuxサーバー障害の対応をハンズオンで学べるような講座となっております。
■こんな方にオススメ
LAMPサーバの構築
CloudWatchを用いた監視設定方法
障害発生時の調査・復旧方法
以下リンクよりご購入いただくことで大幅割引になりますので、気になった方は是非お目通しいただけますと幸いです
有効期限:2025/02/09