こんにちは、キクです 。
久しぶりの投稿となりますが、今年は学習したことのアウトプットを増やしていければなと思います!
・自分にとって分かりやすいもの
・自分にとって記憶の掘り起こしができる材料
こんなコンテンツを残そうと思いました。
そんなことを決意して、今日はその第一弾となります。
最近学習しているLinuxのキャパシティプランニングについて、備忘録的な位置付けで書いていこうと思います!
キャパシティプランニング
システム上で動作している各プログラムが消費するCPUやメモリ、ディスクI/O等を測定してその値を集積していくことで、将来的に負荷が増えた場合にどの程度のリソースが必要とされるかをある程度見積もることができる
topコマンド
書式:top [オプション]
システムリソースの使用状況やプロセスの実行状態などを継続的に監視できる
デフォルトでは3秒間隔で更新される(-dオプションで更新間隔の変更可能)
[root@localhost ~]# top
top - 23:34:27 up 1 min, 2 users, load average: 0.12, 0.07, 0.03
Tasks: 109 total, 1 running, 108 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.0 us, 0.3 sy, 0.0 ni, 99.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 1014808 total, 444772 free, 326260 used, 243776 buff/cache
KiB Swap: 421884 total, 421884 free, 0 used. 543804 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1 root 20 0 125488 3912 2584 S 0.0 0.4 0:01.36 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd
3 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kworker/0:0
4 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/0:0H
5 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kworker/u2:0
1行目
top - 23:34:27 up 1 min, 2 users, load average: 0.12, 0.07, 0.03
システム起動からの経過時間、ログイン中のユーザ数、平均負荷を表示する
平均負荷は実行待ちとなっているプロセスの平均数で、最近の1分間/5分間/15分間の平均数
この数値が"搭載しているCPU数を超えている場合"には何らかの処理待ちが発生していると推測できる
ちなみに、物理CPU数やコア数はどちらも「/proc/cpuifo」で確認できる
2行目
Tasks: 109 total, 1 running, 108 sleeping, 0 stopped, 0 zombie
プロセスの状態ごとの数が表示される
総プロセス数、実行状態、スリープ状態、停止状態、ゾンビ状態
3行目
%Cpu(s): 0.0 us, 0.3 sy, 0.0 ni, 99.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
CPUが各項目に対して割り振られている「時間の割合」を表示する
us:ユーザプロセスがCPUを使用している時間の割合
sy:カーネルがCPUを使用している時間の割合
ni:優先度(nice値)が変更されたプロセスがCPUを使用している時間の割合
id:CPUがアイドル状態になっている時間の割合
wa:ディスクI/Oの時間の割合
hi:ハードウェア割り込み要求時間の割合
si:ソフトウェア割り込み要求時間の割合
st:ゲストOSがCPUを割り当てられなかった時間の割合
4行目
KiB Mem : 1014808 total, 444772 free, 326260 used, 243776 buff/cache
メモリの状況を表示する
全物理メモリ量、未使用のメモリ量、使用中のメモリ量、バッファとキャッシュのサイズが表示される
5行目
KiB Swap: 421884 total, 421884 free, 0 used. 543804 avail Mem
スワップの状況を表示する
スワップ領域のサイズ、未使用のスワップ領域、使用中のスワップ領域、メモリ不足時に使用可能な物理メモリ量が表示される
6行目以降
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1 root 20 0 125488 3912 2584 S 0.0 0.4 0:01.36 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd
3 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kworker/0:0
4 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/0:0H
5 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kworker/u2:0
プロセスごとの情報が表示される
デフォルトではCPU使用率を高い順(降順)で表示されるが、必要な情報ごとにソートをかけることも可能
vmstatコマンド
書式:vmstat [表示間隔(秒)] [回数]
メモリおよび仮想メモリの詳細な状態を継続的に監視できる
[root@localhost ~]# vmstat
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
2 0 0 452500 3176 230628 0 0 568 117 77 193 1 1 98 0 0
topコマンドと違い"バッファ"と"キャッシュ"それぞれのサイズを確認することもできる
Linuxでは、使われていない物理メモリをできるだけキャッシュに割り当てる性質があるため、起動時間が長いほど未使用領域(free列)の値は小さくなっていく
しかし、キャッシュ列が大きい分には実際にメモリが足りないというわけではないのであまり心配しなくて良い
スワップ領域に関しては「スワップイン」と「スワップアウト」のメモリサイズが表示される
ここの値が継続的に「0以外の場合」にはメモリが不足している可能性がある
スワップアウト:メモリ上であまり使われていない情報をストレージ上に確保したスワップ領域に書き込んで、メモリに飽き領域を作る処理
スワップイン:スワップアウトしてストレージに退避した情報を再度メモリ上に呼び出す処理
sarコマンド
書式:sar オプション [-s 開始時刻] [-e 終了時刻] [-f ログファイル名][表示間隔(秒)[回数]]
さまざまなシステム統計情報のレポートを得ることができる
/var/log/sa/saxxファイルからオプションで指定した情報を表示することができる
ここに集積される情報は「sadcコマンド」によるものであり、sarコマンドはその集積されたデータを確認するものとなる
下記は例として直近の23日(sa23)のメモリ情報(-r)を表示している
[root@localhost ~]# sar -r -f /var/log/sa/sa23
Linux 3.10.0-1062.9.1.el7.x86_64 (localhost.localdomain) 12/23/19 _x86_64_ (1 CPU)
21:58:45 LINUX RESTART
22:00:01 kbmemfree kbmemused %memused kbbuffers kbcached kbcommit %commit kbactive kbinact kbdirty
22:10:01 442212 572596 56.42 3180 217420 875996 60.97 336464 161804 0
22:20:01 439812 574996 56.66 5240 217508 876000 60.97 338396 162056 0
22:30:01 440000 574808 56.64 5240 217512 876000 60.97 338408 162024 0
22:40:01 439828 574980 56.66 5240 217516 876000 60.97 338412 162024 0
22:50:01 439700 575108 56.67 5240 217520 876000 60.97 338428 162024 0
Average: 440310 574498 56.61 4828 217495 875999 60.97 338022 161986 0
-fオプションでファイルを指定しなかった場合、一定間隔で取得される当日のデータが表示される
sar オプション 秒数 回数 とすることで、リアルタイムな情報を表示することもできる
[root@localhost ~]# sar -r 5 3
Linux 3.10.0-1062.9.1.el7.x86_64 (localhost.localdomain) 01/13/20 _x86_64_ (1 CPU)
12:03:25 kbmemfree kbmemused %memused kbbuffers kbcached kbcommit %commit kbactive kbinact kbdirty
12:03:30 451060 563748 55.55 3176 211196 887940 61.80 332208 156340 0
12:03:35 451060 563748 55.55 3176 211196 887940 61.80 332208 156340 0
12:03:40 451060 563748 55.55 3176 211196 887940 61.80 332212 156340 0
Average: 451060 563748 55.55 3176 211196 887940 61.80 332209 156340 0
また、オプションによって確認したい情報を選択することが可能である
/proc/meminfoファイル
メモリに関する詳細な情報を確認することができる
[root@localhost ~]# cat /proc/meminfo
MemTotal: 1014808
kB
MemFree: 451148
kB
MemAvailable: 540752
kB
Buffers: 3176
kB
Cached: 211196
kB
SwapCached: 0
kB
Active: 332076
kB
Inactive: 156308
<以下省略>
dfコマンド
書式:df [オプション] [ディレクトリ]
ディスク使用量を測定できる
[root@localhost ~]# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 485M 0 485M 0% /
dev
tmpfs 496M 0 496M 0% /
dev/shm
tmpfs 496M 6.8M 489M 2% /run
tmpfs 496M 0 496M 0% /sys/fs/cgroup
/dev/mapper/centos-root 3.1G 2.9G 240M 93% /
/dev/sda1 1014M 155M 860M 16% /
boot
tmpfs 100M 0 100M 0% /run/user/1001
tmpfs 100M 0 100M 0% /run/user/0
引数でディレクトリを指定すると、そのディレクトリが含まれるファイルシステムについて表示する
[root@localhost ~]# df -h /root
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/centos-root 3.1G 2.9G 240M 93% /
上記の場合、rootディレクトリを含むファイルシステムのみを表示している
netstatコマンド
書式:netstat [オプション]
ネットワークインターフェースの情報を調べる
[root@localhost ~]# netstat -i
Kernel Interface table
Iface MTU RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR
Flg
enp0s3 1500 1112 0 0 0 577 0 0 0 BMRU
lo 65536 76 0 0 0 76 0 0 0 LRU
RX-OK:正常に受信したパケット数
RX-ERR:受信におけるエラー数
TX-ERR:転送におけるエラー数
RX-DRP:受信時の取りこぼし数
TX-DRP:転送時の取りこぼし数
おわりに
今回の内容は各コマンドの全貌ではありませんが、「必要な情報を取得するために必要なコマンドには何があったか」というのをパッと見て分かるものを記せたかなと思います。
例えば「メモリ情報を取得したい→vmstatの使い方を検索」とするためにはあらかじめvmstatコマンドの存在と用途を知っておく必要があります。
しかし、本記事を見れることで「vmstatでメモリ情報を取得できるのか」という紐付けができるかなと思います!
これから学習する内容に関しても、そんな書き方ができればいいなと思います。
ではでは!