8.2. パフォーマンスの問題の監視と診断

Red Hat Enterprise Linux 7 ではシステムパフォーマンスの監視、I/O およびファイルシステムやその設定に関連するパフォーマンスの問題の診断を行う際に便利なツールがいくつか用意されています。このセクションではこうしたツールの概要、および I/O およびファイルシステム関連のパフォーマンス問題を監視、診断する方法を例を使って説明していきます。

8.2.1. vmstat を使ったシステムパフォーマンスの監視

vmstat はシステム全体のプロセス、メモリー、ページング、ブロック I/O、割り込み、CPU アクティビティーについて報告を行います。I/O サブシステムがパフォーマンスの問題に関連していないかどうかを判断する際に役に立ちます。
I/O パフォーマンスに最も関連する情報は以下のコラムです。
si
スワップイン、またはスワップ領域からの読み取り (KB 単位)
so
スワップアウト、またはスワップ領域への書き込み (KB 単位)
bi
ブロックイン、書き込み動作のブロック (KB 単位)
bo
ブロックアウト、読み取り動作のブロック (KB 単位)
wa
I/O 動作の完了を待機しているキューの部分
swap 領域とデータが同じデバイスにある場合、スワップインとスワップアウトはメモリー使用量の目安として特に役立ちます。
また、free、buff、cache の各コラムはライトバック頻度を確認する際に役立ちます。cache の値が突然下がって free の値が増えるような場合、ライトバックとページのキャッシュの無効化が始まったことを指しています。
vmstat での分析で I/O サブシステムがパフォーマンスの低下に関連していることが示されている場合は iostat を使ってその I/O デバイスを確定することができます。
vmstatprocps-ng パッケージで提供されます。vmstat の使い方については man ページをご覧ください。
$ man vmstat

8.2.2. iostat を使った I/O パフォーマンスの監視

Iostatsysstat パッケージで提供されます。システム内の I/O デバイスの負荷について報告します。vmstat での分析で I/O サブシステムがパフォーマンスの低下に関連していることが示されている場合は iostat を使ってその I/O デバイスを確定することができます。
iostat man ページで定義されているパラメーターを使用すると iostat の報告出力を特定のデバイスに集中させることができます。
$ man iostat

8.2.2.1. blktrace を使った詳細な I/O 分析

Blktrace は I/O サブシステム内で費やされた時間配分に関する詳細情報を提供します。付属ユーティリティーの blkparseblktrace から生の出力を読み取り blktrace で記録される入力および出力の動作の概要を読みやすい形で生成します。
このツールの詳細については、blktrace(8) and blkparse(1) の man ページを参照してください。
$ man blktrace
$ man blkparse

8.2.2.2. btt を使った blktrace 出力の分析

btt ユーティリティーは blktrace パッケージの一部として提供されます。blktrace の出力を分析して I/O スタックの各エリアでデータが消費する時間を表示するため I/O サブシステム内の障害を発見しやすくなります。
blktrace メカニズムによって追跡され、btt によって分析される重要なイベントの一部は次のとおりです。
  • I/O イベントのキューイング (Q)
  • I/O イベントのドライバーイベントへのディスパッチ (D)
  • I/O イベントの完了 (C)
イベントの組み合わせを検証して、I/O のパフォーマンスに関与する要因を含むまたは除外することができます。
各 I/O デバイスのサブポーションのタイミングを検査するには、I/O デバイスのキャプチャーした blktrace イベント間のタイミングを確認します。たとえば、以下のコマンドは、スケジューラー、ドライバー、およびハードウェアレイヤーが含まれるカーネル I/O スタックの下部で費やされた合計時間 (Q2C) を待機期間の平均として報告します。
$ iostat -x

[...]
Device:         await r_await w_await
vda             16.75    0.97  162.05
dm-0            30.18    1.13  223.45
dm-1             0.14    0.14    0.00
[...]
デバイスがリクエストに対応するのに長時間かかる場合 (D2C)、デバイスが過負荷の状態であったり、デバイスの送られたワークロードが最適ではないことがあります。ストレージデバイスがディスパッチされる前 (Q2G) に、ブロック I/O が長時間キューに置かれた場合、使用中のストレージは I/O の負荷に対応できないことを示す場合があります。たとえば、LUN のキューが満杯の状態になり、I/O をストレージデバイスにディスパッチできないことがあります。
前後の I/O のタイミングを調べると、ボトルネックの状況が分かります。たとえば、ブロックレイヤーに送信されたリクエストの間隔 (Q2Q) がリクエストがブロックレイヤーで費やす時間の合計 (Q2C) よりも大きいと btt が示す場合、I/O リクエストの間にアイドル時間があり、I/O サブシステムがパフォーマンスの問題に関係しない可能性があることを意味します。
I/O 前後の Q2C 値を比較すると、ストレージサービス時間の変動量を示すことができます。値は以下のいずれかになります。
  • 小さい範囲ではほぼ一貫している。
  • 分布範囲では変動が大きく、ストレージデバイス側での輻輳問題の可能性がある。
このツールについての詳細は、btt(1) の man ページを参照してください。
$ man btt

8.2.2.3. seekwatcher を使った blktrace 出力の分析

seekwatcher ツールは blktrace の出力を使って I/O の時間経過を図式化することができます。ディスク I/O の LBA (論理ブロックアドレス)、処理能力 (MB/秒)、毎秒のシーク数、毎秒の I/O 動作数を示します。いつデバイスの毎秒の動作数の制限に達しているかを確認する際に役立ちます。
このツールの詳細については man ページをご覧ください。
$ man seekwatcher

8.2.3. SystemTap を使ったストレージの監視

Red Hat Enterprise Linux 7 SystemTap ビギナーズガイド』には、ストレージパフォーマンスのプロファイリングおよび監視に便利な複数のサンプルスクリプトが含まれています。
次の SystemTap のスクリプト例はストレージのパフォーマンスに関連し、ストレージやファイルシステムパフォーマンス関連の問題を診断する際に役立ちます。デフォルトでは /usr/share/doc/systemtap-client/examples/io ディレクトリーにインストールされます。
disktop.stp
ディスクの読み取りや書き込みの状態を 5 秒ごとにチェックして上位 10 位のエントリーを出力します。
iotime.stp
読み取りおよび書き込みの動作に費やした時間、読み取りと書き込みのバイト数を出力します。
traceio.stp
監視した累積 I/O トラフィックに応じた上位 10 位の実行可能ファイルを毎秒出力します。
traceio2.stp
指定デバイスに対して読み取りおよび書き込みが発生するとその実行可能ファイル名とプロセス ID を出力します。
inodewatch.stp
指定のメジャーまたはマイナーデバイス上の指定 inode に対して読み取りや書き込みが発生するたびにその実行可能ファイル名とプロセス ID を出力します。
inodewatch2.stp
指定のメジャーまたはマイナーデバイス上の指定 inode で属性が変更されるたびにその実行可能ファイル名、プロセス ID、属性を出力します。

このページには機械翻訳が使用されている場合があります (詳細はこちら)。