1 システムのモニタリングとパフォーマンスの最適化
パフォーマンスの問題は、ソフトウェアやハードウェアなどのいくつかのシステム・コンポーネントや、関連する相互作用によって発生する可能性があります。Oracle Linuxでは、多数のパフォーマンス診断ユーティリティが使用可能で、その中には、様々なハードウェア・コンポーネントのリソース使用率を監視および分析するツールや、いくつかのプロセスや関連スレッドでパフォーマンスの問題を診断するためのトレース・ツールなどがあります。
多くのパフォーマンスの問題は、構成エラーの結果です。これらのエラーは、有効なソフトウェア、ハードウェア、ストレージ、ドライバおよびネットワークのコンポーネントについて事前にテストした検証済の構成を使用することで回避できます。検証済の構成では、Oracle Linuxデプロイメントのベスト・プラクティスが取り込まれ、スタック全体の実際のテストが実施されています。オラクル社では、多くの検証済の構成を公開しており、ダウンロードできます。カーネル・パラメータ設定に関する追加の推奨事項については、実行中のリリースのリリース・ノートを参照してください。
システムのパフォーマンスおよび監視のユーティリティ
システム・リソースの使用状況とエラーに関する情報を収集でき、過負荷のディスク、ネットワーク、メモリーまたはCPUが原因のパフォーマンスの問題を特定するために役立つ、様々なOracle Linuxユーティリティが使用可能です。
システムのパフォーマンスおよび監視のユーティリティについては、デフォルトで次のパッケージがインストールされます。それらがまだない場合は、必要に応じてパッケージをインストールできます。
util-linux
ではdmesg
が提供されます。これを使用して、カーネル・リング・バッファの内容を表示します。これには、システム・リソースの使用状況に関するエラーが含まれている可能性があります。procps-ng
では次のユーティリティが提供されます。free
: システム内の空きメモリーおよび使用済メモリーの量を表示します。top
: システムで実行中のタスクについて、動的なリアルタイムのビューを提供します。uptime
: 過去1分間、5分間および15分間のシステム・ロード平均を表示します。vmstat
: 仮想メモリー統計をレポートします。
iproute
では次のユーティリティが提供されます。ip
: ネットワーク・インタフェースの統計とエラーをレポートします。ss
: ネットワーク・インタフェースの統計をレポートします。
ヒント:
あるユーティリティがシステム内に存在するかどうか調べるには、そのユーティリティのパッケージがインストールされているかどうかを確認します。たとえば、dmesg
ユーティリティの場合は、次のように入力します。
dnf info util-linux
Installed Packages
Name : util-linux
Version : version-number
...
次のパッケージをインストールすると、その他のユーティリティを利用できます。
sysstat
では次のユーティリティが提供されます。iostat
: I/O統計をレポートします。mpstat
: プロセッサ関連の統計をレポートします。sar
: システム・アクティビティに関する情報をレポートします。
iotop
では、ディスクを監視しプロセスごとにI/Oを入れ替える、iotop
が提供されます。nfs-utils
では、NFSマウントのI/O統計をレポートする、nfsiostat
が提供されます
これらのユーティリティの多くは、オーバーラップ機能を提供します。詳細は、ユーティリティの個々のマニュアル・ページを参照してください。
これらのユーティリティの多くに関する実践的チュートリアルおよび関連ビデオ・コンテンツについては、Oracle Linuxでのシステム・リソースの監視を参照してください。
システム・リソースの使用状況の監視
システム・リソースに関する情報を収集することで、システム・パフォーマンスを監視できます。より適切に評価するためには、まず、標準的な操作条件で許容測定値のベースラインを確立します。メモリー不足やリソース使用率のスパイクなどの問題発生時にそれらの識別が容易になるように、そのベースラインを基準点として使用できます。また、パフォーマンス・モニタリングを使用して、将来的な拡大を計画することも、構成の変更が将来のパフォーマンスに与える影響を判断することもできます。
システム内のリソースの使用状況を監視する方法の詳細は、OSWatcher Black Boxの使用およびPerformance Co-Pilotの使用も参照してください。
使用状況のリアルタイムでの監視
設定した秒数ごとにリアルタイムでモニタリング・コマンドを実行し、出力の変化を監視するには、watchコマンドを使用します。たとえば、次のコマンドを使用して、mpstatコマンドを1秒ごとに実行できます。
sudo watch -n 1 mpstat
このコマンドでは、出力内容が単一行として生成され、1秒ごとにその情報が変化します。次に例を示します。
hh:mm:ss CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
hh:mm:ss all 1.44 0.02 0.80 0.01 0.07 0.05 0.06 0.00 0.00 97.56
また、多くのコマンドでサンプリング間隔を秒数で指定できます。次に例を示します。
sudo mpstat 1
このコマンドでは、前述のコマンドと同じ情報が表示されますが、情報が連続的に一覧表示されていき、1秒ごとに新しい行が生成されるという点が異なります。
hh:mm:ss CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
hh:mm:ss all 0.00 0.00 0.00 0.00 0.50 0.50 0.00 0.00 0.00 99.01
hh:mm:ss all 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
...
リアルタイム監視を停止するには、[Ctrl]を押しながら[C]を押します。
ログによる使用状況の監視
sarユーティリティでは、システムの実行中は10分ごとに統計が記録され、その情報は当月の日ごとに保持されます。その情報は/var/log/sa/saDD
に格納されます。
当月の特定の日のsar
ログの内容を表示するには、次のように入力します。
sudo sar -A -f /var/log/sa/saDD
sar
コマンドを使用して、監視する必要がある特定の情報について記録を含む、カスタマイズしたログを作成することもできます。次の構文を使用します。
sudo sar -o datafile seconds count >/dev/null 2>&1 &
前述のコマンドでは、datafileは情報を格納する必要があるカスタマイズしたログへのフルパスであり、countは記録するサンプルの数を表しています。このコマンドを使用すると、sar
プロセスがバックグラウンドで実行され、データが収集されます。
この監視の結果を表示するには、次のように入力します。
sudo sar -A -f datafile
CPU使用率の監視
すべてのCPUコアがシステム・プロセスの実行で占有されると、その他のプロセスは、CPUコアが解放されるか、そのコードを実行するようにスケジューラがCPUコアを切り替えるまで待機する必要があります。あまりに頻繁に多数のプロセスがキューに入れられると、システムのパフォーマンスのボトルネックになる可能性があります。
CPU使用率を監視するためのコマンドのいくつかを次に示します。これらのコマンドで使用できる様々なオプションおよび引数については、それぞれのマニュアル・ページを参照してください。
- uptime
- mpstat
- sar
- top
次の例では、これらのコマンドを使用してシステムのメモリー使用率に関する統計を取得する方法を示します。
-
CPUコアごとのCPU使用率統計を確認し、すべてのCPUコアにわたるそのデータの平均を示します。
-
mpstat -P ALL
05:10:01 PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle 05:10:01 PM all 0.76 0.02 0.70 0.02 0.08 0.05 0.06 0.00 0.00 98.32 05:10:01 PM 0 0.75 0.01 0.68 0.00 0.09 0.03 0.07 0.00 0.00 98.37 05:10:01 PM 1 0.76 0.03 0.72 0.03 0.06 0.06 0.06 0.00 0.00 98.27
-
sar -u -P ALL
03:00:01 PM CPU %user %nice %system %iowait %steal %idle 03:10:01 PM all 8.30 0.00 2.20 0.22 0.10 89.18 03:10:01 PM 0 8.22 0.00 2.64 0.31 0.09 88.74 03:10:01 PM 1 8.39 0.00 1.77 0.13 0.10 89.61 ...
これらのコマンドの出力には、
%idle
見出しの下に、CPUでシステム・コードまたはプロセス・コードが実行されていない時間の割合を示すデータが含まれています。この割合が、すべてのCPUコアにおいてほぼ常に0%に近い場合は、システムで、実行中のワークロードに対するCPUバウンドが発生しています。%system
または%sys
見出しの下に示されるシステム・コードの実行時間の割合は、(%idle
が0%に近い場合は特に)、30%を超えないようにすることをお薦めします。 -
-
システム・ロード平均に関する情報を確認します。
-
uptime
21:25:34 up 6:28, 1 user, load average: 0.02, 0.10, 0.04
-
sar -q
14:57:55 LINUX RESTART (2 CPU) 03:00:01 PM runq-sz plist-sz ldavg-1 ldavg-5 ldavg-15 blocked 03:10:01 PM 0 214 0.19 0.30 0.22 0 03:20:01 PM 0 212 0.00 0.05 0.10 0 ... Average: runq-sz plist-sz ldavg-1 ldavg-5 ldavg-15 blocked Average: 1 212 0.12 0.08 0.05 0
システム・ロード平均は、CPUコアにおいて実行中、実行待機中、およびディスクI/Oアクティビティの完了待機中のプロセスの数の組合せからなり、その後に、それらすべてについて、一定期間にわたる平均が示されます。
uptime
コマンドでは情報が1行で示されますが、sar
構文では、ldavg-*
見出しの下の複数の列で情報が示されます。また、sar
構文では、実行待機中のプロセスの数、およびプロセスの合計数も示されます。それらは、runq-sz
見出しとplist_sz
見出しの下に示されます。ビジー・システムでは、通常は、ロード平均が5分間または15分間にわたりCPUコア数の2倍を超えないようにすることをお薦めします。長期にわたりロード平均がCPUコア数の4倍を超えている場合、システムは過負荷になっています。
システム・ロードをより適切に評価するには、ユーザーとアプリケーションにシステム応答性に関する問題が発生しないような標準の負荷におけるシステムの平均負荷を求めます。その後、このベンチマークからの偏差を一定期間調べます。ロード平均の大幅な上昇は、重大なパフォーマンスの問題を示す場合があります。
-
-
CPUアクティビティのリアルタイム・リストを確認します。
top
top - 22:13:34 up 7:16, 1 user, load average: 0.00, 0.02, 0.01 Tasks: 149 total, 1 running, 148 sleeping, 0 stopped, 0 zombie %Cpu(s): 0.2 us, 0.0 sy, 0.0 ni, 99.7 id, 0.0 wa, 0.2 hi, 0.0 si, 0.0 st MiB Mem : 14705.5 total, 11738.9 free, 753.2 used, 2213.4 buff/cache MiB Swap: 4096.0 total, 4096.0 free, 0.0 used. 13588.9 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 34781 root 20 0 11384 7100 1700 S 1.0 0.0 0:00.03 pidstat 2014 root 20 0 26216 3568 3056 S 0.7 0.0 0:04.78 OSWatcher 1481 root 20 0 202628 38328 36792 S 0.3 0.3 0:02.94 sssd_nss ...
デフォルトで、topでは、システム上の最もCPU集中型のプロセスがリストされます。その出力の上部のセクションには、過去1分間、5分間および15分間のロード平均、実行中およびスリープ中のプロセスまたはタスクの数、合計CPU使用率とメモリー使用量などの一般情報が表示されます。
2番目の表には、プロセスID番号(PID)、プロセス所有者、CPU使用率、メモリー使用量、実行時間、コマンド名など、プロセスのリストが表示されます。デフォルトで、リストはCPU使用率でソートされ、CPUの上位コンシューマが最初にリストされます。
topプロセスを停止するには、[Ctrl]を押しながら[C]を押します。
すべてのコマンドを一緒に使用することで、システムのCPU使用率を把握できます。たとえば、ロード平均または実行キュー・サイズが大きく%idle
の割合が低い状態が続いている場合は、システムのCPU容量がワークロードに対してが不十分であることを示している可能性があります。CPU使用率が高いときは、top
コマンドにより、どのプロセスが原因である可能性があるかを特定できます。
メモリー使用量の監視
メモリー使用量を監視するための役立つユーティリティを次に示します。
sarコマンドによるメモリー使用量の監視
メモリー使用量を監視するには、入手する必要がある情報に応じて、使用可能なオプションを指定して、sarコマンドを実行します。オプションのリストを表示するには、sar --helpと入力します。
sar -r
: メモリー使用量の統計がレポートされます(空き(kbmemfree
)、使用可能(kbavail
)、および使用済(kbmemused
)メモリーなど)。このレポートには、使用中の物理メモリーの割合である%memused
も含まれています。sar -B
: メモリーのページングの統計がレポートされます(ページ・イン(pgpgin/s
)とページ・アウト(pgpgout/s
)、ページ・フォルト、メジャー・フォルトなど)。このレポートには、1秒ごとにkswapd
デーモンによってスキャンされるメモリー・ページの数であるpgscank/s
、および1秒ごとに直接スキャンされるメモリー・ページの数であるpgscand/s
も含まれています。sar -W
: スワッピングの統計がレポートされます(1秒ごとにスワップ・インおよびスワップ・アウトされるページの数であるpswpin/s
とpswpout/s
など)。
%memused
が100%に近く、スキャン率が毎秒200ページを継続的に超えている場合、システムはメモリー不足です。
システムで実メモリーまたは物理メモリーが不足し、スワップ領域の使用が開始されると、システムのパフォーマンスは大幅に低下します。スワップ領域が不足した場合は、一部のプログラムまたはOS全体さえも正しく機能しない可能性があります。freeまたはtopコマンドで、使用可能なスワップ領域がわずかであることが示された場合は、システムのメモリーが残り少なくなっています。
dmesgコマンドからの出力には、ブート時に検出された、物理メモリーに関する問題の通知が含まれている場合があります。
適応型メモリー管理デーモンの使用
メモリー使用量を管理するには、適応型メモリー管理デーモンを使用します。このデーモンは、UEK R6以降で提供されています。このデーモンは、Oracle Linuxシステム上の空きメモリーを監視し、メモリーの断片化と使用量を予測するユーザー領域サービスです。また、システム・メモリーが断片化されすぎたり、容量が一杯になるリスクがある場合は、自動的にメモリーを再利用することもできます。
システム・メモリーが高度に断片化された場合、adaptivemmd
はカーネルをトリガーしてメモリーを圧縮し、断片化された領域を再配置する前に再利用できるようにします。システムが使用可能なメモリーを使い果たす可能性がある場合は、ウォーターマークが調整され、カーネルにメモリー内の新しいページを解放させることがあります。適応型メモリー管理は、Unbreakable Enterprise Kernelリリース6以降で使用できます。
このユーティリティを使用するには、次のことを実行します。
adaptivemm
パッケージをインストールします。sudo dnf install -y adaptivemm
- このデーモン・サービスを開始します。
sudo systemctl enable --now adaptivemmd
adaptivemmdコマンドで使用できる様々なオプションを表示するには、次のように入力します。
sudo adaptivemmd -h
構成オプションは、/etc/sysconfig/adaptivemmd
で変更できます。
詳細は、adaptivemmd(8)
マニュアル・ページを参照してください。
ブロックI/O使用量の監視
iostatコマンドでは、デバイスがアクティブである時間を平均データ転送速度と比較して監視することによって、ブロックI/Oデバイスの負荷が監視されます。この情報を使用すると、ディスクおよびホスト・アダプタ全体でI/O負荷を平均化するようにシステム構成を調整できます。このコマンドの出力例を次に示します。
iostat
avg-cpu: %user %nice %system %iowait %steal %idle
0.69 0.05 0.77 0.00 0.03 98.46
Device tps kB_read/s kB_wrtn/s kB_read kB_wrtn
sda 1.05 2.32 25.19 611410 6640659
dm-0 0.62 2.07 20.22 545716 5329660
dm-1 0.70 0.02 4.97 4632 1308788
iostat -xでは、デバイスに対するI/Oリクエストの処理に費やしたCPU時間の割合である%util
、そのデバイスに対して発行されたI/Oリクエストの平均キューの長さであるavgqu-sz
など、ブロックI/Oアクティビティに関する拡張統計が1秒間隔でレポートされます。%util
が100%に近い、またはavgqu-sz
が1より大きい場合は、デバイス飽和が発生しています。
sar -dコマンドを使用して、%util
やavgqu-sz
の値など、ブロックI/Oアクティビティに関してレポートすることもできます。
iotopユーティリティは、過剰なディスクI/Oの原因であるプロセスを特定するのに役立ちます。iotopのユーザー・インタフェースはtopに似ています。その上部のセクションに、iotopでは、1秒当たりのディスク入出力使用量の合計がバイト数で表示されます。その下部のセクションに、iotopでは、1秒当たりのディスク入出力使用量(バイト数)、ディスクからページへのスワップ・インまたはI/Oの待機に費やした時間の割合、およびコマンド名など、各プロセスに対するI/O情報が表示されます。コマンドの出力例を次に示します。
sudo iotop
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> COMMAND
1 be/4 root 0.00 B/s 0.00 B/s systemd --switched-root --system --deserialize 16
2 be/4 root 0.00 B/s 0.00 B/s [kthreadd]
...
出力の確認中に、矢印キーを使用するとソート・フィールドを変更でき、[A]
を押すと、I/O単位を1秒ごとのバイト数と合計バイト数で切り替えることができ、[O]
を押すと、すべてのプロセスの表示とI/Oを実行しているプロセスのみの表示を切り替えることができます。
ファイル・システムの使用量の監視
sar -vコマンドでは、ディレクトリ・キャッシュ内の未使用キャッシュ・エントリの数(dentunusd
)、および使用中のファイル・ハンドラ(file-nr
)、inode
ハンドラ(inode-nr
)、擬似端末(pty-nr
)の数がレポートされます。
sar -v
12:00:01 AM dentunusd file-nr inode-nr pty-nr
12:10:33 AM 80101 2944 73074 0
12:20:33 AM 79788 2944 72654 0
nfsiostatは、マウントされている各NFSファイル・システムのI/O統計情報をレポートします。このコマンドが使用できない場合は、nfs-utils
パッケージをインストールしてください。
ネットワーク使用状況の監視
ip -s linkコマンドでは、送信バイト数(TX
)と受信バイト数(RX
)など、すべてのネットワーク・デバイスに対するネットワーク統計とエラーが表示されます。dropped
およびoverrun
フィールドには、ネットワーク・インタフェース飽和の指標が示されます。次に例を示します。
ip -s link
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
RX: bytes packets errors dropped overrun mcast
240 4 0 0 0 0
TX: bytes packets errors dropped carrier collsns
240 4 0 0 0 0
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000
link/ether 08:00:27:60:95:d5 brd ff:ff:ff:ff:ff:ff
RX: bytes packets errors dropped overrun mcast
258187485 671730 0 0 0 17296
TX: bytes packets errors dropped carrier collsns
13227598 130827 0 0 0 0
ss -sコマンドでは、各プロトコルに対するサマリー統計が表示されます。次に例を示します。
ss -s
Total: 193
TCP: 9 (estab 2, closed 0, orphaned 0, timewait 0)
グラフィック・システム・モニターの使用
GNOMEデスクトップ環境には、グラフィカル・システム・モニターが組み込まれています。これを使用して、システム構成、実行中プロセス、リソース使用率およびファイル・システムに関する情報を表示できます。
システム・モニターを表示するには、次のコマンドを使用します。
gnome-system-monitor
リソース・タブを選択すると、次の情報が表示されます。
-
グラフィック形式のCPU使用率履歴および現在のCPU使用率の割合。
-
グラフィック形式のメモリー使用量とスワップ使用量の履歴、および現在のメモリー使用量とスワップ使用量。
-
グラフィック形式のネットワーク使用状況の履歴、受信および送信ごとの現在のネットワーク使用状況、および受信データと送信データの合計量。
システム・モニターのマニュアルを表示するには、[F1]
を押すか、またはヘルプを選択し、目次を選択します。