Skip to main content

This documentation is for an older version of this product. See the latest version of this content.Opens in a new tab

^PERFSAMPLE を使用したプロセスの監視

ここでは、InterSystems IRIS® データ・プラットフォームのプロセスを分析するためのツールである ^PERFSAMPLE ユーティリティについて説明します。このユーティリティはライブ・システム上のアクティビティを処理し、サンプリングされたアクティビティについて容易にナビゲートできる分析結果を示します。これにより、システムに対する洞察を提供できます。例えば、ECP 要求を確認することでアプリケーションのボトルネックを発見したり、待機イベントのタイプを確認することでシステム全体のボトルネックを特定することができます。

開始するには、目的の InterSystems IRIS インスタンスの %SYS ネームスペースから ^PERFSAMPLE を実行します。

USER>set $namespace = "%SYS"
 
%SYS>do ^PERFSAMPLE

InterSystems プロセスのより一般的な情報は、"InterSystems IRIS プロセスの管理" を参照してください。

サンプルの収集

^PERFSAMPLE を実行するとすぐに、次のメッセージが表示されます。

This utility performs high frequency sampling of processes on the system,
analyzing and counting data points in different ways to understand where
processes are spending most of their time. On ECP Data Servers, this also
offers sampling of the current request being processed and the states of
the ECPSvrW daemons doing the processing.

1) Sample Local Process Activity
2) Sample ECP Server Requests

Option?

インスタンスに ECP クライアント (アプリケーション・サーバ) からの受信 ECP 接続がない場合、上記の option 1 が自動的に選択されます。

その後、次の情報を入力するよう求められます。

  1. どのプロセスまたは ECP 接続をサンプリングするか。

  2. プロセスが以下のいずれかの状態のサンプルを無視するかどうか: READREADWEVTWHANGSLCTSLCTW、および RUNW。ECP 接続のサンプリングでは、ECPSvrW プロセスがアイドルでないイベントのみが記録されます。

    YES (既定値) を選択すると、^PERFSAMPLE で記録されるイベント数が削減されます。多くのプロセスを監視する場合、これによって分析が迅速化され、使用するメモリが少なくなります。

  3. 1 秒あたりの収集サンプル数。

  4. サンプルを収集する合計秒数。

ターミナルに表示されるプロンプトは次のようになります。

Enter a list of PIDs, * for all, or ? for ^%SS display: *
Ignore samples where the process appears idle (READ, HANG, etc)?
  Yes =>
Sample rate per second: 1000 =>
Number of seconds to sample: 30 =>

サンプルの検査と分析

サンプルを収集したら、分析を表示できます。分析は、サンプリングされたプロセスの 1 つ以上のディメンジョン、またはコンポーネントの要約です。つまり、分析は選択したディメンジョンに従ってサンプリングした情報をソートします。

このセクションでは、以下の項目について説明します。

アナライザ内の移動には、次のキーを使用します。

キー入力 移動アクション
上矢印または U セレクタを上に移動します。
下矢印または D セレクタを下に移動します。
右矢印または Enter 現在の項目を選択します。
左矢印または Backspace 前のレベルに戻ります。
C 次のカウント表示を繰り返します。
  • 合計のパーセンテージ

  • 未加工数

  • 現在のサブセットのパーセンテージ

  • (複数のジョブがサンプリングされる場合) この状態で同時に見つかったジョブ数の平均

N または CTRL-D 次のページへ (複数のページがある場合)
P または CTRL-U 前のページへ (複数のページがある場合)
Q ^PERFSAMPLE を終了します。

メインのランディング・ページは次のようになります。

— PERFSAMPLE for Local Process Activity. 1.710949s at 11/17/2020 15:58:31
28479 samples | CPULoad* 0.91
Multiple jobs included: 1290 samples per job
----------------------------'?' for help----------------------------
Select an analysis to view:
New Analysis (press '+' any time)
Using CPU? -> PID -> Process State
Using CPU? -> Routine -> Namespace -> Process State
Process State -> Routine -> PID
Kernel Wait State -> Routine -> PID

事前定義分析の例

以下に、Process State ディメンジョンで始まる分析例を示します。

この例では、^PERFSAMPLE により、合計で 319994 のサンプル数の中から、サンプリング可能な状態 (アイドルを無視するオプションが選択されていた場合) のプロセスのサンプルが 76755 件見つかりました。

– PERFSAMPLE for Local Process Activity. 3.89s at 11/17/2020 16:59:59
76755 events in 319994 samples [24.0 %-total] | CPULoad* 8.22
Multiple jobs included: 2191 samples per job
----------------------------'?' for help----------------------------
Process State [24.0 %-total]
GGET [8.46 %-total]
RUN [5.88 %-total]
GDEF [3.16 %-total]
GSETW [1.63 %-total]
BSETW [1.21 %-total]
GDEFW [1.18 %-total]
GGETW [0.931 %-total]
SEMW [0.685 %-total]
GSET [0.311 %-total]
LOCKW [0.144 %-total]
LOCK [0.0644 %-total]
INCRW [0.0641 %-total]
BSET [0.0513 %-total]

最初に、サンプルの合計数のパーセンテージとして値が表示されます。このケースでサンプリングされた最も一般的な Process State 値は GGET でした。これは、全部で 319994 件のサンプルの 8.46% を占めています。

c を押すと、このカウントの表示方法が切り替えられます。例えば、上記の情報を未加工のサンプル数として表示できます。

Process State [76755]
> GGET [27083]
RUN [18823]
GDEF [10121]

この情報を適格なサンプルのパーセンテージ (この場合はアイドルではない Process State を持つサンプル) として表示することもできます。

Process State [24.0 %-total]
> GGET [35.3 %-subset]
RUN [24.5 %-subset]
GDEF [13.2 %-subset]

最後に、各状態で同時に見つかったジョブ数の平均を表示できます。

Process State [24.0 %-total]
GGET [12.4 jobs]
RUN [8.59 jobs]
GDEF [4.62 jobs]

右矢印キーを使用して GGET を選択すると、次のディメンジョンに移動し、サンプルの最初のディメンジョンの値が GGET となるように、そのディメンジョンの値が並べられます。ディメンジョン間は、矢印キーを使用して自由に移動できます。

カスタム分析の作成

メインのランディング・ページの New Analysis オプションを選択し、カスタム分析を作成します。次のショートカットのいずれかを使用してカスタム分析を作成することもできます。

キー入力 ショートカット
+ キー (分析内で) 現在の分析にディメンジョンを追加します。
* キー 最初のディメンジョンとして現在の項目を使用して、新しい分析を開始します。

新しい分析を追加すると、次の画面が表示されます。

New Analysis:

Specify a comma-delimited list of dimensions upon which to analyze samples.
For example, "state,ns,rou" means first count each unique state the sampled
processes were in; then for each state, count the namespace from the samples
in that state; and finally for each state->namespace pair, count each unique
routine name. In other words, report on routines by namespace by state.

The following dimensions are available:
cpu - Using CPU? (process state indicates expected CPU use)
ns - Namespace (current namespace)
pid - PID (process ID)
rou - Routine (name of current routine)
state - Process State (process state string, e.g. GSETW)
trace - Kernel Trace (alternative to 'state' w/ kernel-level detail)
waits - Kernel Wait State (kernel-level condition that delayed the process)
wtrace - Reverse Kernel Trace (revese kernel trace, stop at any wait state)

Enter dimension list:

ここから、プロンプトの説明に従って、分析するディメンジョンのリストを表示します。Enter を押すと、上記のとおり分析に移動できます。

分析のディメンジョン

分析のディメンジョンは、^PERFSAMPLE ツール内に示されます。このセクションでは追加情報を示します。

  • cpu - CPU を使用するかどうか(プロセス状態により、CPU の使用量が予測される)

    Note:

    cpu に対する yes または no の値は、CPU の使用時には真の基準とはなりませんが、見積もりには使用できます。^PERFSAMPLE はプロセス状態から CPU の使用量を推測し、InterSystems IRIS の状態トラッキングは CPU の使用量には直接関係しません。

    CPU の (瞬間的または永続的な) 過剰使用により、OS スケジューラが CPU を使用可能にするのをプロセスが待機している場合にも、cpu に誤差が生じる場合があります。

  • ns - ネームスペース (現在のネームスペース)

  • pid - PID (プロセス ID)

  • rou - ルーチン (現在のルーチンの名前)

  • state - プロセス状態 (プロセス状態を表す文字列。GSETW など)

  • waits - カーネル待機状態 (プロセスを遅延させたカーネルレベルの状態)。詳細は、以下のセクションを参照してください。

一般に、インターシステムズのサポート窓口Opens in a new tabでのトラブルシューティングの際に有用なのは、次のディメンジョンのみです。

  • trace - Kernel Trace (カーネルレベルの詳細を含む 'state' の代替)

  • wtrace - Reverse Kernel Trace (逆カーネル・トレース、任意の待機状態で停止)

trace および wtrace ディメンジョンには階層構成があります。省略記号 (...) で表される祖先を選択すると、階層レベルを下ることができます。祖先以外の項目を選択すると、分析の次のディメンジョンに進みます。h キーを使用すると、この階層ビューと平坦化ビューを切り替えることができます。祖先上で a キーを押すと、そのすべての子孫のディメンジョンが集約されます。

waits ディメンジョン

InterSystems IRIS のカーネル内部の何かをプロセスが待機していることが認められなかった場合、waits ディメンジョンは NULL です。NULL 以外の値は、プロセスが待機する (内部的にブロックする) 必要がある状態を示します。

これらは、アプリケーションの直接の制御外でプロセスが待機状態になる内部状態であることに注意することが重要です。したがって、競合する LOCK コマンド、$SYSTEM.Event などによる待機は、ここでは対象外です。

それでも、多くの値 (特に頻度の高い値) が、間接的にアプリケーションの影響を受ける可能性があります。例えば、主なアプリケーション・プロセスがよく diskio を待機していることがサンプルで示された場合、プロセスはディスクからのデータベース・ブロックの読み取りを待機しており、これは、並列処理、事前フェッチ、またはデータベース・キャッシュの増加が効果的である可能性があることを示しています。同様に、inusebufwt を待機していることが多いことがサンプルによって示されているプロセスは、データベース・ブロックの衝突が発生しており、アプリケーション・レベルでの調査 (^BLKCOL utilityを使用して) が必要な可能性があります。このディメンジョン内の値は、次のニーモニック値を持ちません。これは将来的には変更される可能性があります。

  • diskio : データベース物理ブロック読み取りを待機中

  • inusebufwt : ブロック衝突による待機中 (アプリケーションの原因の特定には ^BLKCOL utility が役立つ場合があります)

  • expandデータベースの拡張を待機中

  • ecpwait : ECP サーバからの応答を待機中

  • jrniowait : ジャーナル・バッファに空き領域がないため、ジャーナル入出力を待機中

  • jrnsyncblk : ジャーナル・データがコミットされるのを待機中

  • jrnlckwaitジャーナル・バッファへのアクセスを待機中

  • mirrorwaitアクティブなバックアップ・ミラー・メンバOpens in a new tabを待機中

  • mirrortroubleミラーの障害状態Opens in a new tabによりブロックされている

  • globwait : グローバル更新が内部の状態によりブロックされているため待機中

  • aiowait : 非同期ディスク I/O が完了するのを待機中

  • wdqwait : 書き込みサイクルが完了するのを待機中

  • freebufグローバル・バッファがすべて使用されており、データベースの書き込みを待機中

  • gfownwait : データベースへのアクセスがブロックされている

  • resenqXYZ : 内部リソース XYZ で待機中

Note:

これらの多くは、W の文字フラグを含むキャノニック形式のプロセス状態 (GSETWGORDW など) に対応していますが、すべてがそうであるとは限らず (diskio がよくある例です)、W 状態フラグのすべてのケースでここに反映される内部的な理由があるわけではありません (上記の LOCKW など)。

分析の保存

サンプルを表示したら、今後の分析のためにこれらを保存できます。保存するには、分析のランディング・ページで左矢印を押します。これにより、最初のサンプルの収集ページに戻りますが、Save Samples to File というオプションが追加されています。このオプションを選択して、perfsample001.txt など、目的のファイル名を入力します。^PERFSAMPLE により、ファイルが install-dir\mgr ディレクトリに保存されます。

保存されている分析を開くには、LOAD タブを使用して ^PERFSAMPLE を起動し、開くファイルを指定します。次に、例を示します。

USER>set $namespace = "%SYS"
 
%SYS>do LOAD^PERFSAMPLE

File: C:\MyIRIS\mgr\perfsample001.txt

^PERFSAMPLE によりファイルがロードされ、保存されているサンプルを分析および検証できます。

FeedbackOpens in a new tab