かにに流されない

備忘録とか。

LPIC201-1 キャパシティプランニング

1.1 キャパシティプランニング

1.1.1 キャパシティプランニング

  • キャパシティプランニングとは?
    • システムが最大どれだけリソースが必要かを見積もる
    • 主なリソースとしては、CPU使用率、メモリ利用率、ディスクI/O、スワップ利用率、ネットワークI/O
  • パフォーマンスチューニングとは?
    • 効率よくシステム上のリソースを使えるよう、さまざまな設定を調整して性能を最適化すること

1.2 リソース使用率の測定とトラブルシューティング

1.2.1 総合的なリソース使用率の測定

topコマンド

  • システムリソースの使用状況、プロセスの実行状態を継続的に監視
オプション 説明
-b 対話モードではなくバッチモードで起動
-d 更新間隔を指定
-n 指定した回数だけ更新すると終了
-u ユーザー 指定したUID(or ユーザ名)のプロセスを監視
-p PID 指定したPIDのプロセスを監視

◆実行例

[root@localhost ~]# top
top - 13:03:42 up 11 min,  1 user,  load average: 0.78, 0.24, 0.08
Tasks: 104 total,   1 running, 103 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.0 us, 11.8 sy,  0.0 ni, 88.2 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :  1014756 total,   736312 free,   171040 used,   107404 buff/cache
KiB Swap:  1048572 total,  1048572 free,        0 used.   715064 avail Mem

  PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND
    1 root      20   0   46088   6580   4132 S  0.0  0.6   0:00.77 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
    6 root      20   0       0      0      0 S  0.0  0.0   0:00.02 ksoftirqd/0
    7 root      rt   0       0      0      0 S  0.0  0.0   0:00.00 migration/0
    8 root      20   0       0      0      0 S  0.0  0.0   0:00.00 rcu_bh
    9 root      20   0       0      0      0 S  0.0  0.0   0:00.22 rcu_sched
   10 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 lru-add-dra+
   11 root      rt   0       0      0      0 S  0.0  0.0   0:00.34 watchdog/0
   13 root      20   0       0      0      0 S  0.0  0.0   0:00.00 kdevtmpfs
   14 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 netns
   15 root      20   0       0      0      0 S  0.0  0.0   0:00.00 khungtaskd
   16 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 writeback
   17 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 kintegrityd
   18 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 bioset

◆1行目:平均負荷などの状態

top - 13:03:42 up 11 min,  1 user,  load average: 0.78, 0.24, 0.08
  • 現在日時:「13:03:42
  • 起動してからの経過時間:「up 11 min
  • ログイン中のユーザー数:「1 user
  • 平均負荷(直近1分、5分、15分):「load average: 0.78, 0.24, 0.08
    • CPUが他のプロセスを処理中であるために実行待ちとなっているプロセスの平均数

◆2行目:プロセスの状態

Tasks: 104 total,   1 running, 103 sleeping,   0 stopped,   0 zombie
  • 総プロセス数(total)、実行状態(running)、スリープ状態(sleeping)、停止状態(stopped)、ゾンビ状態(zombie)

◆3行目:CPUの状態

%Cpu(s):  0.0 us, 11.8 sy,  0.0 ni, 88.2 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
  • us(user):ユーザープロセスがCPUを使用している時間の割合
  • sy(system):カーネルがCPUを使用している時間の割合
  • ni(nice):優先度が変更されたプロセスがCPUを使用している時間の割合
  • id(idle):CPUがアイドル状態の時間の割合
  • wa( io wait):ディスクI/O待ちの時間の割合
  • hi(hardware irq):ハードウェア割込み要求時間の割合
    • 周辺機器の割込み要求によって発生する割込み
  • si(software irq):ソフトウェア割込み要求時間の割合
    • CPU内部の割込み命令によって発生する割込み
  • st(steal):ゲストOSがCPUを割り当てられなかった時間の割合

◆4,5行目:メモリとスワップの状況

KiB Mem :  1014756 total,   736312 free,   171040 used,   107404 buff/cache
KiB Swap:  1048572 total,  1048572 free,        0 used.   715064 avail Mem
  • total:全物理メモリ量
  • free:空きメモリ量
  • used:使用中のメモリ量
  • buff/cache:バッファ及びキャッシュサイズ
  • avail Mem:メモリ不足時に利用可能な物理メモリ量

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 734824   2108 104940    0    0  4420   193  903 2116 10 14 38 39  0
  • procs
    • r:実行待ちプロセス数
    • b:割込み不可能なスリープ状態にあるプロセス数
  • memory【単位はKB】
    • swpd:スワップサイズ
    • free:空きメモリサイズ
    • buff:バッファに割り当てられているメモリサイズ
    • cache:キャッシュに割り当てられているメモリサイズ
  • swap【単位はKB/秒】
    • si:ディスクからスワップインされているメモリサイズ
    • so:ディスクからスワップアウトされているメモリサイズ
  • io【単位はブロック/秒】
    • bi:ブロックデバイスから受け取ったブロック数
    • bo:ブロックデバイスに送られたブロック数
  • system
  • cpu
    • us:ユーザプロセスがCPUを使用している時間の割合
    • sy:カーネルがCPUを使用している時間の割合
    • id:CPUがアイドル状態の時間の割合
    • wa:ディスクI/O待ちの時間の割合
    • st:ゲストOSがCPUを割り当てられなかった時間の割合

iostatコマンド

  • CPUの使用状況とディスクの入出力に関する情報を継続的に監視するコマンド

$ iostat [オプション] [表示間隔(秒)] [回数]

◆実行例

[root@localhost ~]# iostat
Linux 3.10.0-1160.el7.x86_64 (localhost.localdomain)    2022年04月30日  _x86_64_        (1 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.23    0.00    0.12    0.26    0.00   99.39

Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
sda               1.58        38.33        72.26     206255     388786
dm-0              1.19        36.12        71.88     194322     386738
dm-1              0.02         0.41         0.00       2204          0

iotopコマンド

  • I/O情報をtopコマンドのように表示するコマンド
Total DISK READ :       0.00 B/s | Total DISK WRITE :       0.00 B/s
Actual DISK READ:       0.00 B/s | Actual DISK WRITE:       0.00 B/s
  TID  PRIO  USER     DISK READ  DISK WRITE  SWAPIN     IO>    COMMAND
    1 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % systemd -~rialize 22
    2 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [kthreadd]
    4 be/0 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [kworker/0:0H]
    5 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [kworker/u2:0]
    6 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [ksoftirqd/0]
    7 rt/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [migration/0]
    8 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [rcu_bh]
…

sarコマンド

  • 様々なシステム統計情報のレポートを得ることができるコマンド

◆実行例(ディスク関連情報を表示)

[root@localhost sa]# sar -b -f /var/log/sa/sa30
Linux 3.10.0-1160.el7.x86_64 (localhost.localdomain)    2022年04月30日  _x86_64_        (1 CPU)

21時10分01秒       tps      rtps      wtps   bread/s   bwrtn/s
21時20分01秒      0.13      0.00      0.13      0.00      1.35
21時30分01秒      0.11      0.00      0.11      0.00      1.12
平均値:           0.12      0.00      0.12      0.00      1.23
  • tps:I/O転送リクエスト数/秒
  • rtps:ディスク読込リクエスト数/秒
  • wtps:ディスク書き込みリクエスト数/秒
  • bread/s:ディスク読込ブロック数/秒
  • bwrtn/s:ディスク書き込みブロック数/秒

◆実行例(ネットワークインターフェース情報を表示)

[root@localhost sa]# sar -n DEV -f /var/log/sa/sa30
Linux 3.10.0-1160.el7.x86_64 (localhost.localdomain)    2022年04月30日  _x86_64_        (1 CPU)

21時10分01秒     IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s
21時20分01秒    enp0s3      0.04      0.04      0.00      0.00      0.00      0.00      0.00
21時20分01秒    enp0s8      0.03      0.01      0.00      0.00      0.00      0.00      0.00
21時20分01秒        lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00
…
平均値:         enp0s3      0.36      0.20      0.03      0.03      0.00      0.00      0.00
平均値:         enp0s8      0.04      0.01      0.00      0.00      0.00      0.00      0.00
平均値:             lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00
  • IFACE:ネットワークインターフェース名
  • rxpck/s:受信パケット数/s
  • txpck/s:送信パケット数/s
  • rxkB/s:受信kB/s
  • txkB/s:送信kB/s
  • rxcmp/s:圧縮パケットの受信バイト数/s
  • txcmp/s:圧縮パケットの送信バイト数/s
  • rxmcst/s:マルチキャストパケットの受信パケット数/s

◆実行例(ネットワークインターフェースごとのエラー情報)

[root@localhost sa]# sar -n EDEV -f /var/log/sa/sa30
Linux 3.10.0-1160.el7.x86_64 (localhost.localdomain)    2022年04月30日  _x86_64_        (1 CPU)

21時10分01秒     IFACE   rxerr/s   txerr/s    coll/s  rxdrop/s  txdrop/s  txcarr/s  rxfram/s  rxfifo/s  txfifo/s
21時20分01秒    enp0s3      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
…
  • rxerr/s:受信エラーパケット数/s
  • txerr/s:送信エラーパケット数/s
  • coll/s:衝突パケット数/s
  • rxdrop/s:バッファ不足による受信取りこぼしパケット数/s
  • txdrop/s:バッファ不足による送信取りこぼしパケット数/s
  • txcarr/s:送信時のキャリアエラーパケット数/s
  • rxfram/s:受信時のフレーム同期エラーパケット数/s
  • rxfifo/s:受信時のFIFOオーバーランパケット数/s
  • txfifo/s:送信時のFIFOオーバーランパケット数/s

◆実行例(メモリ関連情報)

[root@localhost sa]# sar -r -f /var/log/sa/sa30
Linux 3.10.0-1160.el7.x86_64 (localhost.localdomain)    2022年04月30日  _x86_64_        (1 CPU)

21時10分01秒 kbmemfree kbmemused  %memused kbbuffers  kbcached  kbcommit   %commit  kbactive   kbinact   kbdirty
21時20分01秒    236976    777780     76.65      2108    561756    317524     15.39    548324     89548         0

sadfコマンド

  • sadcによるログを、TSVやXML形式て出力できるコマンド
オプション 説明
-j JSON形式で出力する
-x XML形式で出力する
-t (UTFではなく)ローカル日時で表示する
-- 以降のオプションはsarコマンドに渡す

◆実行例

[root@localhost ~]# sadf /var/log/sa/sa30 -t -- -r
localhost.localdomain   600     2022-04-30 21:20:01     -       kbmemfree       236976
localhost.localdomain   600     2022-04-30 21:20:01     -       kbmemused       777780
localhost.localdomain   600     2022-04-30 21:20:01     -       %memused        76.65
localhost.localdomain   600     2022-04-30 21:20:01     -       kbbuffers       2108
localhost.localdomain   600     2022-04-30 21:20:01     -       kbcached        561756
…

uptimeコマンド

  • システムの稼働時間やログインユーザー数、平均負荷などが表示される
  • topコマンドの1行目とほぼ同じ

◆実行例

[root@localhost ~]# uptime
 00:18:07 up  4:42,  1 user,  load average: 0.04, 0.04, 0.05

wコマンド

  • 現在ログインしているユーザーと、各ユーザーのプロセス情報が表示される
  • 1行目の表示はuptimeコマンドと同じ

◆実行例

[root@localhost ~]# w
 00:19:48 up  4:43,  1 user,  load average: 0.01, 0.03, 0.05
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
root     pts/0    gateway          19:36    4.00s  0.06s  0.00s w
  • TTY:端末名
  • FROM:リモートホスト
  • LOGIN@:ログイン時刻
  • IDLE:アイドル時間
  • JCPU:当該端末から実行されている全プロセスが消費したCPU時間
  • PCPU:WHAT欄に表示されるカレントプロセスが消費したCPU時間
  • WHAT:実行されているコマンド

1.2.2 CPU使用率の測定

psコマンド

  • プロセス単位で詳細な情報を確認することができる

◆実行例(システムで実行されているすべてのプロセスを表示)

[root@localhost ~]# ps aux
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.5  0.6 128020  6620 ?        Ss   13:41   0:00 /usr/lib/system
root         2  0.0  0.0      0     0 ?        S    13:41   0:00 [kthreadd]
root         3  0.0  0.0      0     0 ?        S    13:41   0:00 [kworker/0:0]
root         4  0.0  0.0      0     0 ?        S<   13:41   0:00 [kworker/0:0H]
…

[root@localhost ~]# ps -ef
UID        PID  PPID  C STIME TTY          TIME CMD
root         1     0  0 13:41 ?        00:00:00 /usr/lib/systemd/systemd --switc
root         2     0  0 13:41 ?        00:00:00 [kthreadd]
root         3     2  0 13:41 ?        00:00:00 [kworker/0:0]
root         4     2  0 13:41 ?        00:00:00 [kworker/0:0H]
…

ぱっと見で分かりにくい表示項目 - VSZ:プロセスが使用するメモリ量 - RSS:現時点で使用中のメモリ量 - TYY:制御端末名

pstreeコマンド

  • プロセスの親子関係をツリー上に表示するコマンド ◆実行例
[root@localhost ~]# pstree
systemqwqNetworkManagerqwq2*[dhclient]
        x                mq2*[{NetworkManager}]
        tqagetty
        tqauditdqqq{auditd}
        tqchronyd
        tqcrond
…
# 罫線の表示が文字化けしてる。。

1.2.3 メモリおよびスワップ使用量の測定

freeコマンド

[root@localhost ~]# free
              total        used        free      shared  buff/cache   available
Mem:        1014756      176168      578928        6968      259660      691960
Swap:       1048572           0     1048572
  • 利用可能なメモリ量はavailable列を参照すること
  • スワップはディスクの一部を仮想的なメモリとして利用する機能
    • スワップが頻繁に利用される場合、不要なサービスの停止やメモリ増設が必要
  • 詳細なメモリ情報は、/proc/meminfo に記載
[root@localhost ~]# cat /proc/meminfo
MemTotal:        1014756 kB   #トータルのメモリサイズ
MemFree:          578508 kB   #空きメモリサイズ
MemAvailable:     691684 kB   #新たなアプリケーション起動時にスワップなしで利用可能なメモリサイズ
Buffers:            2108 kB   #バッファサイズ
Cached:           233944 kB   #キャッシュサイズ
SwapCached:            0 kB
Active:           163352 kB
Inactive:         148768 kB
Active(anon):      76336 kB
Inactive(anon):     6732 kB
Active(file):      87016 kB
Inactive(file):   142036 kB
Unevictable:           0 kB
Mlocked:               0 kB
SwapTotal:       1048572 kB   #スワップ領域サイズ
SwapFree:        1048572 kB   #スワップ領域の空きサイズ
…

1.2.4 ディスク使用量の測定

dfコマンド

◆実行例

[root@localhost ~]# df -T -h
ファイルシス            タイプ   サイズ  使用  残り 使用% マウント位置
devtmpfs                devtmpfs   484M     0  484M    0% /dev
tmpfs                   tmpfs      496M     0  496M    0% /dev/shm
tmpfs                   tmpfs      496M  6.8M  489M    2% /run
tmpfs                   tmpfs      496M     0  496M    0% /sys/fs/cgroup
/dev/mapper/centos-root xfs        8.0G  1.7G  6.4G   21% /
/dev/sda1               xfs       1014M  138M  877M   14% /boot
tmpfs                   tmpfs      100M     0  100M    0% /run/user/0

1.2.5 ネットワークトラフィックの測定

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     1126      0      0 0           811      0      0      0 BMRU
enp0s8           1500       98      0      0 0            41      0      0      0 BMRU
lo              65536        0      0      0 0             0      0      0      0 LRU
  • -sオプションを使うとプロトコルごとの統計情報を表示できる

◆実行例

[root@localhost ~]# netstat -s
Ip:
    1136 total packets received
    0 forwarded
    0 incoming packets discarded
    1064 incoming packets delivered
    775 requests sent out
    32 dropped because of missing route
Icmp:
    0 ICMP messages received
    0 input ICMP message failed.
    ICMP input histogram:
    0 ICMP messages sent
    0 ICMP messages failed
    ICMP output histogram:
  • ベンチマークツールNetperfを用いる方法もある
    • netserverコマンドを使って接続を待ち受け、netperfコマンドを使ってクライアントからサーバに接続する
    • iptrafコマンド:ネットワークインターフェースのトラフィックを監視できるコマンド

1.3 リソース需要の分析と予測

1.3.1 リソース監視ツール

collectd

  • システムの各種情報を定期的に収集する軽量なデーモン
    • CPU使用率
    • システムの温度やファンの速度
    • プロセスの実行状況
    • ネットワークトラフィックやレイテンシ
    • Apache WebサーバやNginxnのリクエストや転送状況
    • DNSサーバBINDの情報
    • データベースサーバの情報
    • スワップ状況
    • ユーザーのログイン状況

Nagios

  • オープンソースの市捨て、卯監視およびネットワーク監視を行うアプリケーション
    • ネットワークサービスの監視(HTTP、SMTPPOP3FTPSNMP
    • システムリソースの監視(CPU、平均負荷、ディスク使用率など)
    • 現状をWebブラウザで確認できるWebインターフェース
    • 問題発生時にメールやSMSなどでユーザーに通知
    • 問題発生時に対応するイベントハンドラを定義可能
    • ログファイルの自動ローテーション
    • ホストを階層構造で定義可能

MRTG

  • Multi Router Traffic Grapher の略
  • トラフィックをグラフ化するプログラム
  • SNMPに対応したネットワーク機器やサーバの情報も収集できる

Cacti

  • MRTGの代替となるソフトウェア
    • MRTGと比べて優れている点は、設定をWebブラウザベースで行える、過去のグラフを参照できること

Icinga2

  • Nagiosからフォークした統合監視ツール

1.3.2 需要の分析と将来の予測

◆ キャパシティプランニングで注目する観点

  • CPU
    • 単純に平均負荷だけではなく、システム使用率やユーザー使用率などCPUがより多く消費する部分の特定が大事
    • 個々のプロセス単位でCPUの使用率を把握する
  • メモリ
    • 空きメモリは自動的にディスクキャッシュに使用される
    • スワップの使用状況が大切
  • ディスクI/O
    • 特定のパーティションにアクセスが集中していないか、ディスクの増加率に注目
  • ネットワーク

1.3.3 リソースの問題解決

◆パフォーマンスチューニングで注目する観点

  • カーネル
    • カーネルをハードウェアに合わせて再構築することで性能を十分に発揮できる
      • サポートが受けられなくなる可能性もあるので注意
    • /proc/sys イカカーネルパラメータを調整する
  • サービス
    • 起動スクリプトを確認し、不要なサービスを起動しないように設定
  • メモリとスワップ
    • vmstatコマンド、freeコマンドでスワップ領域の使用状況を把握する