Linuxサーバーにおけるキャパシティプランニングについて勉強したので、リソースを確認するためのコマンドをまとめてみた。
目次
- 1 キャパシティプランニングとは
- 2 リソースの使用率を確認できるtopコマンド
- 3 メモリの状態を監視できるvmstatコマンド
- 4 ディスクI/Oの状態を監視できるiostatコマンド
- 5 システム統計情報を確認できるsarコマンド
- 6 ログ出力するsadfコマンド
- 7 システムの状態を確認できるuptimeコマンド
- 8 ユーザー毎のプロセス情報を確認できるwコマンド
- 9 CPUの使用率を詳細に測定できるpsコマンド
- 10 プロセスの親子関係を確認できるpstreeコマンド
- 11 メモリとスワップの使用量を確認できるfreeコマンド
- 12 メモリの詳細の情報を確認できるファイル
- 13 ディスク使用量を確認できるdfコマンド
- 14 ネットワークトラフィックを確認できるnetstatコマンド
- 15 スループットを計測できるnetserverコマンド
- 16 パケット数を確認できるiptablesコマンド
キャパシティプランニングとは
キャパシティプランニングとは、コンピュータのCPU、メモリ、ディスク、ネットワーク帯域などのシステムリソースが将来的にパフォーマンスが維持できるよう、最低限のコストで設計する技法のこと。そのシステムがどれだけのリソースを必要とするのかを明確にし、それに対し、過度な性能を持つことなく、限られたコストの中で最適なリソースを、適切に見積もることが大切。また、平常時だけでなく、ピーク時でも目的のプログラムが動作できるだけのリソースを確保できるよう、将来予測することも重要。それには個々のプログラムがCPUやメモリ、I/O消費をどれだけ消費しているのかを把握することが必要。システムリソースでは、特にCPUの利用率、メモリの利用率、スワップの利用率やネットワークI/Oが重要。また、効率よくシステム上のリソースを使えるよう、設定等を調整することで性能の最適化を行うなど、パフォーマンスチューニングすることも大切。特にオンプレミスの場合は、一度構築してしまうとリソースの追加の費用と作業が大変なので、キャパシティプランニングは重要。クラウドも従量課金制なので、リソースを最適化することは不必要な課金を防ぐことができる。
リソースの使用率を確認できるtopコマンド
topコマンドでは、CPUやメモリなどのリソースの状態や平均負荷、ゾンビ状態などを確認できる。
コマンドオプション
オプション | 内容 |
-b | 対話モードでなくバッチモードで実行 |
-d sec | 表示を更新する間 |
-n times | 更新する回数 |
-u user | 指定したUIDまたはユーザー名のプロセスのみ表示 |
-p PID | 指定したPIDのプロセスのみ表示 |
(例)rootのプロセスを1秒間隔で5回更新する場合
top -u root -d 1 -n 5
topコマンドの操作
オプション | 内容 |
[Space], [Enter] | 更新 |
f | 表示項目の変更 |
o | 表示項目の順番の変更 |
l | 平均負荷の表示・非表示 |
m | メモリ及びスワップ状態の表示の変更 |
u | 指定したユーザーのプロセスのみを表示 |
t | プロセスとCPU状態の表示・非表示 |
P | CPU使用率順でソート |
M | メモリ使用率順でソート |
N | PID順でソート |
T | 起動時間順にソート |
W | 現在の設定を保持 |
k | プロセスへシグナルを送信 |
h, ? | ヘルプを表示 |
q | 終了 |
A | 表示モードの切り替え |
d, s | 更新間隔を変更 |
<, > | ソートする項目を変更 |
表示項目
top - 09:50:25 up 3 min, 1 user, load average: 2.49, 1.28, 0.51
Tasks: 262 total, 2 running, 260 sleeping, 0 stopped, 0 zombie
%Cpu(s): 9.5 us, 22.7 sy, 0.0 ni, 42.9 id, 6.7 wa, 0.0 hi, 18.1 si, 0.0 st
MiB Mem : 1962.3 total, 181.1 free, 1104.9 used, 676.4 buff/cache
MiB Swap: 1162.4 total, 1052.9 free, 109.5 used. 671.7 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
729 root 20 0 1392776 33424 7964 S 78.3 1.7 0:38.02 snapd
1826 vboxuser 20 0 5330796 336540 96172 S 75.7 16.7 0:53.85 gnome-shell
47 root 20 0 0 0 0 S 42.7 0.0 0:14.56 ksoftirqd/5
72 root 20 0 0 0 0 S 16.8 0.0 0:05.70 kswapd0
483 root 20 0 0 0 0 I 11.0 0.0 0:01.93 kworker/u12:9-events_unbound
71 root 0 -20 0 0 0 I 7.4 0.0 0:01.58 kworker/0:1H-kblockd
2194 vboxuser 20 0 985620 207296 39344 S 6.1 10.3 0:17.98 snap-store
234 root 20 0 0 0 0 D 4.5 0.0 0:01.38 jbd2/sda3-8
54 root 20 0 0 0 0 I 3.9 0.0 0:02.06 kworker/u12:1-events_unbound
2992 vboxuser 20 0 560488 47464 35232 S 3.2 2.4 0:03.31 gnome-terminal-
205 root 0 -20 0 0 0 I 2.3 0.0 0:00.80 kworker/4:1H-kblockd
226 root 0 -20 0 0 0 I 2.3 0.0 0:01.32 kworker/1:1H-kblockd
476 root 20 0 0 0 0 I 2.3 0.0 0:01.49 kworker/u12:8-loop18
4095 vboxuser 20 0 14580 4536 3672 R 2.3 0.2 0:00.11 top
247 root 20 0 0 0 0 I 1.9 0.0 0:01.19 kworker/4:2-events
181 root 0 -20 0 0 0 I 1.6 0.0 0:01.51 kworker/2:1H-kblockd
35 root 20 0 0 0 0 R 1.0 0.0 0:00.87 ksoftirqd/3
14 root 20 0 0 0 0 S 0.6 0.0 0:00.15 ksoftirqd/0
15 root 20 0 0 0 0 I 0.6 0.0 0:00.79 rcu_preempt
41 root 20 0 0 0 0 S 0.6 0.0 0:00.30 ksoftirqd/4
58 root 20 0 0 0 0 S 0.6 0.0 0:03.42 kcompactd0
86 root 20 0 0 0 0 I 0.6 0.0 0:00.90 kworker/0:2-ata_sff
279 root 19 -1 40156 14020 12416 S 0.6 0.7 0:01.55 systemd-journal
328 root 20 0 0 0 0 I 0.6 0.0 0:01.74 kworker/u12:4-ext4-rsv-conversion
2491 vboxuser 20 0 220228 1668 1424 S 0.6 0.1 0:00.97 VBoxClient
1行目 : top
1行目は、平均負荷などの情報を表示する。平均負荷は、CPUが他のプロセスを処理している最中で、実行待ちになっているプロセスの平均。平均負荷が搭載しているCPUの数またはコア数を超えている場合は、処理待ちが発生している可能性がある。例えば、オクタコア(8コア)のCPUが2つ搭載されている場合は、16が基準となる。従って、平均負荷の値が16を超えた値になっていれば、処理待ちが発生している可能性がある。
項目 | 内容 |
up | 現在時刻とシステム起動してからの経過時間 |
user | 現在のログインユーザー数 |
load average | 平均負荷(1分間、5分間、15分間) |
top - 09:50:25 up 3 min, 1 user, load average: 2.49, 1.28, 0.51
2行目 : Tasks
ゾンビ状態とは、処理が終了したもののプロセステーブルから情報が削除されていないプロセスのこと。
項目 | 内容 |
total | プロセスの総数 |
running | 実行状態 |
sleeping | スリープ状態 |
stopped | 停止状態 |
zombie | ゾンビ状態 |
Tasks: 262 total, 2 running, 260 sleeping, 0 stopped, 0 zombie
3行目 : %Cpu(s)
stは、仮想環境でゲストOSががホストOSに対して要求を行ったがCPUリソースを割り当てられず、待機している時間の割合であり、0%であれば要求通りCPUが割り当てられているが、そうでない場合は、ホストOSや他のゲストOS間でCPUのリソースを奪いあっていることになる。
項目 | 内容 |
us(user) | ユーザープロセスのCPU使用時間の割合 |
sy(system) | カーネルのCPU使用時間の割合 |
ni(nice) | 優先度が変更されたプロセスの使用時間の割合 |
id(idle) | CPUがアイドル状態である時間の割合 |
wa(io wait) | ディスクI/O待ちの時間の割合 |
hi(hardware interupt request) | ハードウェア割り込み要求時間の割合 |
si(software interupt request) | ソフトウェア割り込み要求時価の割合 |
st(steal) | ゲストOSがCPUを割り当てられなかった時間の割合 |
%Cpu(s): 9.5 us, 22.7 sy, 0.0 ni, 42.9 id, 6.7 wa, 0.0 hi, 18.1 si, 0.0 st
4行目 : MiB Mem
メモリの状況を表示。
項目 | 内容 |
total | 物理メモリの総量 |
free | 空きメモリ量 |
used | 使用中のメモリ量 |
buff/cache | バッファ又はキャッシュサイズ |
MiB Mem : 1962.3 total, 181.1 free, 1104.9 used, 676.4 buff/cache
5行目 : MiB Swap
スワップの状況を表示。
項目 | 内容 |
total | スワップ領域のサイズ |
free | 空きスワップ領域 |
used | 使用中のスワップ領域 |
avail Mem | メモリ不足の場合に利用できる物理メモリ量 |
MiB Swap: 1162.4 total, 1052.9 free, 109.5 used. 671.7 avail Mem
6行目以降
6行目以降は、CPU時間の消費量でソートされた状態で各プロセスの情報を表示。
項目 | 内容 |
PID | プロセスID |
PPID | 親プロセスID |
USER | ユーザー名 |
RUSER | 実ユーザー名 |
UID | UID |
GROUP | グループ名 |
PR | 実行優先度 |
NI | nice値 |
VIRT | 使用中の仮想メモリ[KB] |
RES | 使用中の実メモリ[KB] |
SHR | 共有メモリサイズ[KB} |
S | プロセス状態 |
TTY | 制御端末名 |
%CPU | CPU使用率[%] |
%MEM | 物理メモリ使用率[%] |
TIME+ | プロセスが開始してCPUを使用し始めてからの経過時間 |
COMMANS | 実行コマンド |
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
729 root 20 0 1392776 33424 7964 S 78.3 1.7 0:38.02 snapd
1826 vboxuser 20 0 5330796 336540 96172 S 75.7 16.7 0:53.85 gnome-shell
47 root 20 0 0 0 0 S 42.7 0.0 0:14.56 ksoftirqd/5
.
.
.
メモリの状態を監視できるvmstatコマンド
vmstatコマンドでは、メモリ及び仮想メモリの詳細な状態を監視できる。
コマンドオプション
オプションはないが、更新間隔と更新回数を指定できる。
vmstat [更新間隔:sec] [更新回数]
(例)vmstatを1秒間隔で5回更新する場合
vmstat 1 5
表示項目
項目 | 内容 |
procs : r | 実行待ちのプロセス数 |
procs : b | 割り込みが不可能なスリープ状態にあるプロセス数 |
memory : swpd | スワップサイズ[KB] |
memory : free | 空きメモリサイズ[KB] |
memory : buff | バッファに割り当てられているメモリサイズ[KB] |
memory : cache | キャッシュに割り当てられているメモリサイズ[KB] |
swap : si | ディスクからスワップインされているメモリサイズ[KB/sec] |
swap : so | ディスクからスワップアウトされているメモリサイズ[KB/sec] |
io : bi | ブロックデバイスから受け取ったブロック数[ブロック/sec] |
io : bo | ブロックデバイスから送られたブロック数[ブロック/sec] |
system : in | 1秒あたりの割り込み回数 |
system : cs | 1秒あたりのコンテキストスイッチの回数 |
cpu : us | ユーザープロセスがCPU使用時間の割合 |
cpu : sy | カーネルのCPU使用時間の割合 |
cpu : id | CPUがアイドル状態の時間の割合 |
cpu : wa | ディスクI/O待ち時間の割合 |
cpu : st | ゲストOSがCPUに割り当てられなかった時間の割合 |
vmstat 1 5
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
1 0 452216 82668 23592 1044700 3 7 77 141 66 75 1 1 97 1 0
1 0 452216 82668 23592 1044700 0 0 0 0 537 693 2 3 95 0 0
0 0 452216 82668 23592 1044700 0 0 0 0 557 792 1 1 98 0 0
2 0 452216 82668 23592 1044700 0 0 0 0 452 670 0 1 98 0 0
0 0 452216 82668 23592 1044700 0 0 0 0 613 793 2 3 96 0 0
上記では、空き容量は、71360[KB]で、バッファやキャッシュはそこそこ使われている。スワップ領域は452216[KB]あるが、スワップイン、スワップアウトはあまりない。
procsの”b”は、I/O待ちなどで割り込みができないプロセスの数なので、0であることが望ましい。0以外の値となっている場合は、対処が必要である。
ブロックデバイスは、主にLinuxなどのUNIX系OSで周辺機器などにファイル入出力と同じ仕組みでアクセスできるようにするデバイスファイルの種類の一つ。ブロックと呼ばれる決まったデータ量を単位に送受信を行うもので、装置内の任意の位置を指定して読み書きを行うランダムアクセスに対応している。ざっくりまとめるとブロック単位でデータを転送するもの。
ディスクI/Oの状態を監視できるiostatコマンド
CPU使用状況及びディスクの入出力の情報を監視。ディスクI/Oを調査する場合に使用する。
コマンドオプション
オプション | 内容 |
-c | CPU使用率のみ表示 |
-d | ディスクI/O情報のみ表示 |
-k | ブロック単位からKB単位で表示 |
-t | 時間を表示 |
オプション以外にも、更新間隔と更新回数を指定できる。
iostat オプション [表示間隔:sec] [回数]
(例)1秒間隔で5回更新し、KB単位で表示させる
iostat -k 1 5
項目 | 内容 |
%user | ユーザープロセスのCPU使用時間の割合 |
%nice | 優先度が変更されたプロセスの使用時間の割合 |
%system | カーネルのCPU使用時間の割合 |
%iowait | ディスクI/O待ちの時間の割合 |
%steal | ゲストOSがCPUを割り当てられなかった時間の割合 |
%idle | CPUがアイドル状態である時間の割合 |
tps | I/O転送リクエスト数/sec |
kB_read/s | デバイスから読み出した量[KB/sec] |
kB_wrtn/s | デバイスから書き込んだ量[KB/sec] |
kB_read | デバイスから読み出した量[KB] |
kB_wrtn | デバイスから書き込んだ量[KB] |
Linux 5.4.0-1103-aws (ip-172-31-31-189) 02/06/24 _x86_64_ (1 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
0.11 0.01 0.12 0.16 0.01 99.60
Device tps kB_read/s kB_wrtn/s kB_read kB_wrtn
loop0 0.46 0.46 0.00 7804998 0
loop1 0.06 0.06 0.00 1093529 0
loop2 0.24 0.24 0.00 4084410 0
loop3 0.70 0.70 0.00 11807206 0
loop4 0.00 0.00 0.00 29832 0
loop5 1.65 1.65 0.00 27986159 0
loop6 0.19 0.19 0.00 3161328 0
loop7 0.00 0.00 0.00 29 0
xvda 4.53 100.78 6.37 1706712231 107937885
topコマンドみたいなiotopコマンド
iostatコマンド同様、I/O情報を表示。プロセス毎のI/O情報を確認できる。
コマンドが見つからない場合は、パッケージのインストールを行う(下記はUbuntuの場合)。
sudo apt install iotop
あまり使用しないため、省略。
システム統計情報を確認できるsarコマンド
sarコマンドは、色々なシステム統計情報をレポートしてくれる。Linux にデフォルトでインストールされているコマンドラインプログラムで、SADC (System Activity Data Collector) と SAR (System Activity Reporter) のから構成されている。長時間にわたり自動的にデータを収集して、そのデータが後で分析できるよう設計されている。SAR により収集されるデータは、累積統計カウンタレポートとなる。
実際に格納されているデータは、”/var/log/sysstat/”以下のディレクトリの”saXX”となっているファイルであり、ここにログが格納される。”saXX”のXXは日付であり、ログ取得日の日付が6日であれば、”sa06″となる。また、sysstatサービスを有効にする必要がある。sysstatサービスを有効にするには、sysstatファイルのENABLEDを”true”へ変更する。
sudo vi /etc/default/sysstat
#
# Default settings for /etc/init.d/sysstat, /etc/cron.d/sysstat
# and /etc/cron.daily/sysstat files
#
# Should sadc collect system activity informations? Valid values
# are "true" and "false". Please do not put other values, they
# will be overwritten by debconf!
ENABLED="false" -> "true"へ変更
sudo systemctl restart sysstat
コマンドオプション
オプション | 内容 |
-A | すべての項目を表示 |
-b | ディスクの入出力、転送レートの情報を表示 |
-c | プロセスの生成回数を表示 |
-f ファイル名 | ログファイルを指定 |
-n DEV | ネットワーク関連の情報を表示 |
-n EDEV | ネットワーク関連のエラー情報を表示 |
-r | メモリ及びスワップの情報を表示 |
-u | CPUの情報を表示 |
-P id/ALL | CPU毎の情報を表示 |
-R | メモリの統計情報を表示 |
-W | スワップの情報を表示 |
(例)ファイルを指定して、ディスク入出力と転送レートの情報を表示させる。
sar -b -f /var/log/sysstat/sa06
表示項目(オプション”-b”の場合)
表示項目 | 内容 |
tps | I/O転送リクエスト数/sec |
rtps | ディスク読み込みリクエスト数/s |
wtps | ディスク書き込みリクエスト数/s |
bread/s | ディスク読み込みブロック数/s |
bwrtn/s | ディスク書き込みブロック数/s |
sar -b
15:05:01 tps rtps wtps bread/s bwrtn/s
15:15:01 0.61 0.27 0.34 18.65 4.55
15:25:01 0.75 0.17 0.58 8.94 7.91
Average: 0.68 0.22 0.46 13.79 6.23
表示項目(オプション”-n DEV”の場合)
表示項目 | 内容 |
IFACE | ネットワークインターフェース名 |
rxpck/s | 受信パケット数[パケット数/s] |
txpck/s | 送信パケット数[パケット数/s] |
rxkB/s | 受信サイズ[KB/s] |
txkB/s | 送信サイズ[KB/s] |
rxcmp/s | 圧縮パケットの受信サイズ[byte/s] |
txcmp/s | 圧縮パケットの送信サイズ[byte/s] |
rxmcst/s | マルチキャストパケットの受信パケット数[パケット数/s] |
%ifutil | ネットワークインタフェースの利用率 |
sar -n DEV
15:05:01 IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s %ifutil
15:15:01 eth0 1.61 1.56 0.41 0.34 0.00 0.00 0.00 0.00
15:15:01 lo 0.65 0.65 0.16 0.16 0.00 0.00 0.00 0.00
15:25:01 eth0 1.96 1.88 0.45 0.41 0.00 0.00 0.00 0.00
15:25:01 lo 0.86 0.86 0.21 0.21 0.00 0.00 0.00 0.00
Average: eth0 1.78 1.72 0.43 0.38 0.00 0.00 0.00 0.00
Average: lo 0.75 0.75 0.19 0.19 0.00 0.00 0.00 0.00
表示項目(オプション”-n EDEV”の場合)
表示項目 | 内容 |
IFACE | ネットワークインターフェース名 |
rxerr/s | 受信エラーパケット数[パケット数/s] |
txerr/s | 送信エラーパケット数[パケット数/s] |
coll/s | コリジョンパケット数[パケット数/s] |
rxdrop/s | バッファ不足で受信の取りこぼしがあったパケット数[パケット数/s] |
txdrop/s | バッファ不足で送信の取りこぼしがあったパケット数[パケット数/s] |
rxcarr/s | 送信時のキャリアエラーパケット数[パケット数/s] |
rxfram/s | 受信時のフレーム同期のエラーパケット数[パケット数/s] |
rxfifo/s | 受信時のFIFOオーバーランパケット数[パケット数/s] |
txfifo/s | 送信時のFIFOオーバーランパケット数[パケット数/s] |
sar -n EDEV
15:05:01 IFACE rxerr/s txerr/s coll/s rxdrop/s txdrop/s txcarr/s rxfram/s rxfifo/s txfifo/s
15:15:01 eth0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
15:15:01 lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
15:25:01 eth0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
15:25:01 lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Average: eth0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Average: lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
表示項目(オプション”-r”の場合)
表示項目 | 内容 |
kbmemfree | 空きメモリ容量[KB] |
kbmemused | 使用中のメモリ容量[KB] |
%memused | メモリの使用率 |
kbbuffers | バッファ使用量[KB] |
kbcached | キャッシュ使用量[KB] |
kbcommit | 現在必要とされているメモリの総量[KB] |
%commit | RAMとスワップのメモリの総量が必要としているメモリ量の割合[%] |
kbactive | “active”なメモリの容量[KB] |
kbinact | “inactive”なメモリの容量[KB] |
kbdirty | “dirty”なメモリの容量[KB] |
sar -r
15:05:01 kbmemfree kbavail kbmemused %memused kbbuffers kbcached kbcommit %commit kbactive kbinact kbdirty
15:15:01 8504 134104 473700 98.24 17716 183416 996020 206.56 299952 59824 176
15:25:01 6076 134080 476128 98.74 19104 184440 996024 206.56 299348 62944 148
Average: 7290 134092 474914 98.49 18410 183928 996022 206.56 299650 61384 162
Linuxのメモリ管理では、最近使用したファイルの情報をメモリ上にキャッシュし、再度同じファイルにアクセスがあった場合に、キャッシュの情報を利用することで、アクセスが高速化される。ページキャッシュには、ページの利用頻度によって”active”と”inactive”の状態に分けられる。メモリ不足に陥ると、ページが解放される。”dirty”は、ページがディスクに同期されていない状態、またはまだ書き込みが行われていない状態のこと。ディスクと同期中の場合は、”writeback”となる。
ログ出力するsadfコマンド
sadcのログをタブ区切りのテキストやXML形式で出力できる。
sadf [オプション] - [sarコマンドのオプション]
表示項目 | 内容 |
-j | JSON形式で出力 |
-x | XML形式で出力 |
-t | UTFではなく、ローカル日時で表示 |
— | ここから後のオプションはsarコマンドに渡す |
システムの状態を確認できるuptimeコマンド
uptimeコマンドは、システムの稼働時間やログインユーザー数、平均負荷などを表示。表示される内容は、topコマンドの1行目の情報と同じ。
16:11:56 up 196 days, 4:15, 1 user, load average: 0.00, 0.00, 0.00
ユーザー毎のプロセス情報を確認できるwコマンド
wコマンドは、ログインユーザーと他ユーザーのプロセス情報を表示する。ユーザーを指定することで、そのユーザーの情報のみを表示することもできる。
オプション
表示項目 | 内容 |
-h | ヘッダを表示しない |
-s | ログイン時刻、JCPU、PCPUを表示しない |
-u | 現在のプロセス時間とCPU時間を計算する際に、ログイン名と現在のユーザー名の違いを無視 |
-f | リモートホスト名を表示しない |
w [オプション] [ユーザー名]
表示項目
表示項目 | 内容 |
USER | ユーザー名 |
TTY | 端末名 |
FROM | リモートホスト |
LOGIN@ | ログイン時刻 |
IDLE | アイドル時刻 |
JCPU | 当該端末から実行されているすべてのプロセスが消費したCPU時間 |
PCPU | WHAT欄に表示されている現在のプロセスが消費したCPU時間 |
WHAT | 実行されているコマンド |
1行目は、topコマンドの1行目の情報と同じ。
16:19:22 up 196 days, 4:22, 1 user, load average: 0.00, 0.00, 0.00
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
ubuntu pts/0 220.106.51.144 16:11 1.00s 0.04s 0.00s w
CPUの使用率を詳細に測定できるpsコマンド
psコマンドは、プロセス単位の情報を確認できるため、top、vmstatなどのコマンドよりも詳細な情報を使ってCPUの使用率を測定できる。
オプション | 内容 |
a | 端末上の全プロセスを表示 |
e | 環境変数も表示 |
x | 制御端末がないプロセスも表示 |
u | 実行ユーザー名等も表示 |
r | 実行中のプロセスのみ表示 |
l | 長いフォーマットで表示 |
U ユーザー名 | ユーザー名を指定 |
-C コマンド | コマンド名を指定 |
-c | 全プロセスを表示 |
-f | 完全なフォーマットで表示 |
-l | ロング形式で表示 |
-p PID | PIDを指定 |
-t tty | 端末名を指定 |
-u UID | ユーザーIDを指定 |
(例)すべてのプロセスをユーザー名等も含めて表示
ps aux
表示項目(オプション”u”の場合)
表示項目 | 内容 |
USER | ユーザー名 |
PID | プロセスID |
%CPU | CPU使用率 |
%MEM | メモリ使用率 |
VSZ | プロセスが使用できるメモリ量 |
RSS | 現在使用中のメモリ量 |
TTY | 制御端末名 |
STAT | プロセスの状態と優先度 |
START | 実行開始時間 |
TIME | 使用CPU時間 |
COMMAND | 実行コマンド |
ps u
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
ubuntu 30526 0.0 0.6 23224 3080 pts/0 Ss+ 14:45 0:00 -bash
ubuntu 30998 0.0 1.0 23224 5076 pts/1 Ss 16:00 0:00 -bash
ubuntu 31019 0.0 0.7 40100 3520 pts/1 R+ 16:01 0:00 ps u
.
.
.
表示項目(オプション”l”の場合)
表示項目 | 内容 |
F | プロセスに関するフラグ |
UID | ユーザーID |
PID | プロセスID |
PPID | 親プロセスのプロセスID |
PRI | プロセスの優先度 |
NI | プロセスのNice値 |
VSZ | プロセスが使用できるメモリ量 |
RSS | 現在使用中のメモリ量 |
WCHAN | プロセスが休止状態である場合に止まっている場所 |
STAT | プロセスの状態と優先度 |
TTY | 制御端末名 |
TIME | 使用CPU時間 |
COMMAND | 実行コマンド |
ps l
F UID PID PPID PRI NI VSZ RSS WCHAN STAT TTY TIME COMMAND
4 0 1 0 20 0 225476 4884 - Ss ? 3:41 /sbin/init
1 0 2 0 20 0 0 0 - S ? 0:00 [kthreadd]
1 0 3 2 0 -20 0 0 - I< ? 0:00 [rcu_gp]
.
.
.
表示項目(オプション”-l”の場合)
表示項目 | 内容 |
F | プロセスに関するフラグ |
S | プロセスの状態 O:実行中 S:休止状態 R:実行可能状態 I:アイドル状態 Z:ゾンビ状態 |
UID | ユーザーID |
PID | プロセスID |
PPID | 親プロセスのプロセスID |
C | CPU使用率 |
PRI | プロセスの優先度 |
NI | プロセスのNice値 |
ADDR | メモリアドレス |
SZ | プロセスが確保しているメモリ量 |
WCHAN | プロセスが休止状態である場合に止まっている場所 |
TTY | 制御端末名 |
TIME | 使用CPU時間 |
CMD | 実行コマンド |
ps -l
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
4 S 0 914 1 0 80 0 - 3668 - ttyS0 0:00 /sbin/agetty -o -p -- \u --keep-baud 1
4 S 0 916 1 0 80 0 - 3724 - tty1 0:00 /sbin/agetty -o -p -- \u --noclear tty
0 S 1000 30526 30525 0 80 0 - 5806 wait pts/0 0:00 -bash
.
.
.
プロセスの親子関係を確認できるpstreeコマンド
pstreeコマンドは、プロセスのツリーを表示する。
オプション | 内容 |
-a | プロセス起動時の引数を表示 |
-c | 同じ内容のサブツリーをまとめない |
-h | 現在のプロセスと先祖プロセスを強調して表示 |
-l | 長いフォーマットで表示 |
-n | 同じ親を持つプロセス同士をPIDでソート |
-p | PIDを表示 |
-u | uidの遷移を表示 |
-U | UTF-8の罫線文字を使用 |
systemd─┬─accounts-daemon───2*[{accounts-daemon}]
├─acpid
├─2*[agetty]
.
.
.
メモリとスワップの使用量を確認できるfreeコマンド
先に記述したtopコマンドやsarコマンドでも測定できるが、freeコマンドでもメモリとスワップの使用量を測定できる。
オプション | 内容 |
-b | byte単位で表示 |
-k | KB単位で表示 |
-m | MB単位で表示 |
-t | 物理メモリとスワップメモリの合計行を表示 |
-o | バッファ分を増減した行を表示させない |
-s sec | 更新する間隔[sec] |
表示項目
オプション | 内容 |
Mem : total | 搭載している物理メモリ容量(バッファキャッシュとページキャッシュを含める) |
Mem : used | 現在使用しているメモリ容量(バッファキャッシュとページキャッシュを含めない) |
Mem : free | 空きメモリ容量(バッファキャッシュとページキャッシュを含めない) |
Mem : shared | 共有メモリ容量 |
Mem : buff/cache | バッファキャッシュ及びページキャッシュ |
Mem : available | アプリケーション起動時に利用可能な物理メモリ |
Swap : total | スワップ領域容量の合計 |
Swap : used | 現在使用しているスワップ領域容量 |
Swap : free | 空きスワップ領域容量 |
total used free shared buff/cache available
Mem: 482204 237876 14712 92772 229616 139096
Swap: 0 0 0
Linuxでは、使用されていない物理メモリを可能な限りキャッシュに割り当てため、起動時間が長くなればなるほど、空きメモリ容量(Mem : free)が小さくなっていく。ただし、空きメモリ容量が小さくても、キャッシュに割り当てられているサイズが大きい場合は、実際にメモリが足りないわけではない。実際に利用可能なメモリ容量を確認するには、”available”を確認する。
スワップは、物理メモリが不足する場合に、ディスクの一部を仮想的なメモリとして利用する機能で、スワップ領域が継続的に使用されていれば、システムのパフォーマンスは低下する。よって、システムが使用しているメモリ量を測定し、把握しておくことが重要となる。仮にスワップ領域が頻繁に使用されいるようであれば、不要なサービスを停止させるか、メモリを増設させる必要がある。
メモリの詳細の情報を確認できるファイル
“/prec/meminfo”を参照するとメモリの情報を詳細に確認できる。
MemTotal: 482204 kB
MemFree: 10668 kB
MemAvailable: 143024 kB
Buffers: 18044 kB
Cached: 186452 kB
.
.
.
ディスク使用量を確認できるdfコマンド
オプション | 内容 |
-a | すべてのファイルシステムの情報を表示 |
-h | 適切な単位で表示(1[MB] = 1024[KB]) |
-H | 適切な単位で表示(1[MB] = 1,000[KB]) |
-i | iノードの使用状況を表示 |
-l | ローカルファイルシステムのみ表示 |
-m | MB単位で表示 |
-T | ファイルシステムのタイプを表示 |
df -h
Filesystem Size Used Avail Use% Mounted on
udev 222M 0 222M 0% /dev
tmpfs 48M 844K 47M 2% /run
/dev/xvda1 30G 9.4G 20G 33% /
.
.
.
ファイルシステムがext2、ext3、ext4であった場合は、残っているiノードに気を付ける必要がある。iノードは、ファイルの管理情報を格納していて、ファイルシステムの作成時に、一定の数用意される。もしすべてのiノードが使用された場合、ディスク容量に空きがあったとしても、新規にファイルやディレクトリが作成できないため、iノードの使用状況の確認もしておいた方が良い。
df -i
Filesystem Inodes IUsed IFree IUse% Mounted on
udev 56632 305 56327 1% /dev
tmpfs 60275 500 59775 1% /run
/dev/xvda1 3840000 509285 3330715 14% /
.
.
.
ネットワークトラフィックを確認できるnetstatコマンド
ネットワークトラフィックのパフォーマンスは、Netperfなどのベンチマークツールで測定できる。NFSやFTPで容量の大きいファイルを転送し、かかった時間を計測することでネットワークトラフィックのパフォーマンスを測定することもできる。
オプション | 内容 |
-r, –route | ルーティングテーブルを表示 |
-i, –interfaces | インターフェーステーブルを表示 |
-g, –groups | マルチキャストグループのメンバーを表示 |
-s, --statistics | SNMP と同じようにプロトコルごとのネットワーク統計を表示 |
-M, --masquerade | マスカレード接続を表示 |
-v, --verbose | 詳細に表示 |
-W, --wide | IPアドレスを切り捨てずに表示 |
-n, --numeric | 名前解決せずに表示 |
--numeric-hosts | ホスト名を解決にせずに表示 |
--numeric-ports | ポート名を解決せずに表示 |
--numeric-users | ユーザー名を解決せずに表示 |
-N, --symbolic | ハードウェア名の解決を行う |
-e, --extend | その他詳細な情報を表示 |
-p, --programs | ソケットのPID/プログラム名を表示 |
-o, --timers | タイマーを表示 |
-c, --continuous | LISTENINGを連続する |
-l, --listening | LISTEN状態のサーバー、ソケットのみ表示 |
-a, --all display all sockets (default: connected) | すべてのソケットを表示 |
-F, --fib | 転送情報ベースを表示(デフォルト) |
-C, --cache | FIBの代わりにルーティングキャッシュを表示 |
-Z, --context | ソケットの SELinux セキュリティコンテキストを表示 |
表示項目
“RX-DRP”、”TX-DRP”の値が大きい場合は、受信時や転送時に取りこぼしが多いため何かしらの問題が発生している可能性がある。
表示項目 | 内容 |
Iface | インターフェース名 |
MTU | |
RX-OK | 受信成功数 |
RX-ERR | 受信エラー数 |
RX-DRP | 受信時の取りこぼし数 |
RX-OVR | |
TX-OK | 転送成功数 |
TX-ERR | 転送エラー数 |
TX-DRP | 転送時の取りこぼし数 |
TX-OVR | |
Flg |
netstat -i
Kernel Interface table
Iface eth0 9001 31323037 0 0 0 30339019 0 0 0 BMRU
lo 65536 15829052 0 0 0 15829052 0 0 0 LRU
プロトコルごとの統計情報を表示
netstat -s
Ip:
Forwarding: 2
43931289 total packets received
6 with invalid addresses
0 forwarded
0 incoming packets discarded
43897424 incoming packets delivered
45878096 requests sent out
8 outgoing packets dropped
1 dropped because of missing route
Icmp:
3034 ICMP messages received
23 input ICMP message failed
ICMP input histogram:
destination unreachable: 2976
timeout in transit: 58
20 ICMP messages sent
0 ICMP messages failed
ICMP output histogram:
destination unreachable: 20
IcmpMsg:
InType3: 2976
InType11: 58
OutType3: 20
Tcp:
1380358 active connection openings
464784 passive connection openings
36909 failed connection attempts
94589 connection resets received
4 connections established
32865502 segments received
35621808 segments sent out
1577050 segments retransmitted
21 bad segments received
3010772 resets sent
Udp:
11028868 packets received
20 packets to unknown port received
0 packet receive errors
11029694 packets sent
0 receive buffer errors
0 send buffer errors
.
.
.
ssコマンドのオプション”-s”によって、接続状態の統計を見ることができる。
ss -s
Total: 152 (kernel 0)
TCP: 9 (estab 3, closed 0, orphaned 0, synrecv 0, timewait 0/0), ports 0
Transport Total IP IPv6
* 0 - -
RAW 1 0 1
UDP 3 3 0
TCP 9 8 1
INET 13 11 2
FRAG 0 0 0
スループットを計測できるnetserverコマンド
Netperfを利用することで、2つのホスト間でネットワークのスループットを計測することができる。サーバー側は、netserverコマンドで接続を待ち受ける。デフォルトのポートは”12865″。
パケット数を確認できるiptablesコマンド
iptablesでパケットフィルタリングを行っている場合は、iptablesコマンドにオプションを加えることで、ルールにマッチしたパケット数やバイト数を表示できる。
sudo iptables -L -v
Chain INPUT (policy DROP 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
44M 12G ufw-before-logging-input all -- any any anywhere anywhere
44M 12G ufw-before-input all -- any any anywhere anywhere
0 0 ufw-after-input all -- any any anywhere anywhere
0 0 ufw-after-logging-input all -- any any anywhere anywhere
0 0 ufw-reject-input all -- any any anywhere anywhere
0 0 ufw-track-input all -- any any anywhere anywhere
Chain FORWARD (policy DROP 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
0 0 ufw-before-logging-forward all -- any any anywhere anywhere
0 0 ufw-before-forward all -- any any anywhere anywhere
0 0 ufw-after-forward all -- any any anywhere anywhere
0 0 ufw-after-logging-forward all -- any any anywhere anywhere
0 0 ufw-reject-forward all -- any any anywhere anywhere
0 0 ufw-track-forward all -- any any anywhere anywhere
Chain OUTPUT (policy ACCEPT 5676 packets, 373K bytes)
pkts bytes target prot opt in out source destination
46M 11G ufw-before-logging-output all -- any any anywhere anywhere
46M 11G ufw-before-output all -- any any anywhere anywhere
2286K 169M ufw-after-output all -- any any anywhere anywhere
2286K 169M ufw-after-logging-output all -- any any anywhere anywhere
2286K 169M ufw-reject-output all -- any any anywhere anywhere
2286K 169M ufw-track-output all -- any any anywhere anywhere
.
.
.
記事を読んでいただきありがとうございました。