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

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

6.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

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

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

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

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

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

Bttblktrace パッケージの一部として提供されます。blktrace の出力を分析して I/O スタックの各エリアでデータが消費する時間を表示するため I/O サブシステム内の障害を発見しやすくなります。
たとえば、btt でブロック層に送信されている要求間の時間 (Q2Q) がブロック層で要求が費やしている合計時間 (Q2C) より長い場合、I/O サブシステムはパフォーマンスの問題とは関係ないかもしれません。デバイスのサービス処理に費やす時間が長い場合 (D2C)、デバイスがオーバーロードしているか、デバイスに送られた作業負荷が最適でない可能性があります。ブロック I/O に要求が割り当てられるまでに長時間キュー待ちしている場合は(Q2G) 使用中のストレージで I/O の負荷を処理できないことを示している可能性があります。
このツールの詳細については man ページをご覧ください。
$ man btt

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

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

6.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、属性を出力します。
https://access.redhat.com/documentation/ja-jp/red_hat_enterprise_linux/ で『Red Hat Enterprise Linux 7 SystemTap ビギナーズガイド』をご覧ください。