Linuxサーバー障害の原因と調査によく使うコマンドまとめ【Udemyクーポン付き】

# はじめに
こんにちは、普段マルチクラウドを利用しながら
インフラエンジニアをしているServer Campのキタです。

今回はLinuxサーバーでアラームが発生した際の障害の原因と、調査によく利用するコマンドをまとめた記事を書きたいと思います。

主にCPU、メモリ、ディスクの障害について書きます。


## 環境
　基本的に、以下環境で試したものを記載しています。
 ```bash
$ 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の負荷を示す指標になります。
この負荷は、実行中のプロセスの平均数が計算されます。
つまり、システムがどれだけ忙しいかを定量的に示す数値になります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3935946/b00e60ff-a564-e2ea-c149-76450f84f238.png)
この障害の原因はいくつか考えられますが、Webサーバーなどどあれば以下の原因で発生しているパターンが多いかと思います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3935946/d17eda79-4d8c-e199-fd29-c8f58230b3fa.png)

■障害時の調査に使用するコマンド
 ```bash
$ 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コマンドの解説は以下の通りです。
むちゃくちゃ情報が多いですが、覚えておくと様々な情報を瞬時に得ることが出来ます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3935946/856d18c2-2bb1-48fc-d8e5-893767ac406d.png)


## 02. メモリ負荷
メモリ障害の発生原因の理由は様々ですが、
Webサーバー、DBサーバーの場合は以下のパターンをよく見ます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3935946/00a01042-f601-3731-75b3-13a1f2fefc5a.png)
■障害時の調査に使用するコマンド
```bash
$ 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 | 一定間隔で出力する|

free コマンドの確認方法は以下の通りです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3935946/6c32b48e-d2e0-bf38-7b22-7c0ed002a122.png)

## 03. ディスク負荷
ディスク負荷の発生原因は特殊な場合を除いて主に以下の二つになるかと思います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3935946/ecc57679-733f-18fa-1f1f-13f65cfaa75d.png)
cron等で回しているバックアップ処理により一気に使用量が上がりアラームが鳴るパターンが多いですね。

■障害時の調査に使用するコマンド
```bash
$ 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コマンドの見方としては以下の通りです。
ルートディレクトリ以下から使用量が高くなっているディレクトリを、階層ごとに順番で探っていくのが良いかと思います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3935946/9a1cfcc6-4804-289c-fc71-951362952bc0.png)

## 最後に
最後までご覧いただきありがとうございました！
本記事が是非参考になりますと幸いです。

また、こちらの記事はServer Campから出しているUdemy講座から一部抜粋しました！
**AWS を用いてLinuxサーバー障害の対応をハンズオンで学べるような講座**となっております。

■こんな方にオススメ
LAMPサーバの構築
CloudWatchを用いた監視設定方法
障害発生時の調査・復旧方法

以下リンクよりご購入いただくことで大幅割引になりますので、気になった方は是非お目通しいただけますと幸いです:bow_tone1:
有効期限：2025/02/09

https://www.udemy.com/course/aws-linux-server-operation/?couponCode=2BBEF55536EE3FBC708A