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/秒】
- io【単位はブロック/秒】
- system
- in:1秒当たりの割込み回数(クロック割込みも含む)
- cs:1秒当たりのコンテキストスイッチの回数
- 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
- システムの各種情報を定期的に収集する軽量なデーモン
Nagios
- オープンソースの市捨て、卯監視およびネットワーク監視を行うアプリケーション
MRTG
Cacti
Icinga2
- Nagiosからフォークした統合監視ツール
1.3.2 需要の分析と将来の予測
◆ キャパシティプランニングで注目する観点
- CPU
- 単純に平均負荷だけではなく、システム使用率やユーザー使用率などCPUがより多く消費する部分の特定が大事
- 個々のプロセス単位でCPUの使用率を把握する
- メモリ
- 空きメモリは自動的にディスクキャッシュに使用される
- スワップの使用状況が大切
- ディスクI/O
- 特定のパーティションにアクセスが集中していないか、ディスクの増加率に注目
- ネットワーク
- ネットワークトラフィックを計測する
1.3.3 リソースの問題解決
◆パフォーマンスチューニングで注目する観点