【Linux】キャパシティプランニング関連コマンド(備忘録)

2020年1月13日

f:id:yurulow23:20200113190300j:plain

こんにちは、キクです 。

久しぶりの投稿となりますが、今年は学習したことのアウトプットを増やしていければなと思います!

・自分にとって分かりやすいもの
・自分にとって記憶の掘り起こしができる材料

こんなコンテンツを残そうと思いました。
そんなことを決意して、今日はその第一弾となります。

最近学習している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」で確認できる

補足情報

この行に表示される情報は「uptimeコマンド」でも確認することができる

[root@localhost ~]# uptime

23:34:27 up 2 min,  1 user,  load average: 0.04, 0.04, 0.02

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を使用している時間の割合
idCPUがアイドル状態になっている時間の割合
wa:ディスクI/Oの時間の割合
hi:ハードウェア割り込み要求時間の割合
si:ソフトウェア割り込み要求時間の割合
st:ゲストOSCPUを割り当てられなかった時間の割合

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使用率を高い順(降順)で表示されるが、必要な情報ごとにソートをかけることも可能

ソート例

shift + m:プロセスをメモリ使用順にソート
shift + n :プロセスをPID順にソート
shift + t :プロセスを起動時間順にソート

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


また、オプションによって確認したい情報を選択することが可能である

オプション例

-b    :ディスクの入出力と転送レート情報を表示する
-r     :メモリとスワップ関連の情報を表示する
-u    :CPU関連の情報を表示する
-n DEV  :ネットワーク関連の情報を表示する
-n EDEV :ネットワーク関連のエラー情報を表示する
-f ファイル:情報を確認したいログファイル(sa10など)を指定する

/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ディレクトリを含むファイルシステムのみを表示している

オプション例

-h:適切な単位で表示する(1MB=1024KB
-i :ディスク容量ではなくiノードの使用状況を表示する
-T:ファイルシステムタイプを表示する

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:転送時の取りこぼし数

オプション例

-i:全てのネットワークインターフェースを表示する
-r:ルーティングテーブルを表示する

おわりに

今回の内容は各コマンドの全貌ではありませんが、「必要な情報を取得するために必要なコマンドには何があったか」というのをパッと見て分かるものを記せたかなと思います。

例えば「メモリ情報を取得したい→vmstatの使い方を検索」とするためにはあらかじめvmstatコマンドの存在と用途を知っておく必要があります。
しかし、本記事を見れることで「vmstatでメモリ情報を取得できるのか」という紐付けができるかなと思います!
これから学習する内容に関しても、そんな書き方ができればいいなと思います。

ではでは!

  • LINE
  • -Linux
    -