【技術】Linux学習_キャパシティプランニング関連コマンド

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:メモリとスワップ関連の情報を表示する

-uCPU関連の情報を表示する

-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 kB



<以下省略>

 

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でメモリ情報を取得できるのか」という紐付けができるかなと思います!

 

これから学習する内容に関しても、そんな書き方ができればいいなと思います。

ではでは。