【IRIS】【計測関連】システム単位でアレコレ計測しよう (^PERFMON)

本記事は、計測シリーズとして「^PERFMON」を利用したデータ収集について解説します。

※この記事は下記の方向けになります。
  • インスタンス全体のパフォーマンスを把握したい方
  • 「どこが遅いのか分からない」状態から調査を始めたい方
  • ^%SYS.MONLBL などの詳細分析の前に、全体の傾向を掴みたい方

はじめに

^PERFMONは、インスタンス全体のイベントを集計します。

この機能も、「^%SYS.MONLBL」と同様に計測を行う為、処理速度が若干低下します。
その為、本番環境にて実行する際は、よく検討して実行して下さい。

この機能を使えば、システム全体の動きが把握できるため、ボトルネックになっている箇所を探すのに役にたつと思います。

^PERFMONの最大の特徴は、「個別処理ではなく、インスタンス全体の振る舞いを横断的に可視化できる」点です。

では、先ずはどのような計測値が出力できるか確認してみましょう。

どんな内容が出力される?

^PERFMONでは、下記3つの要素を組み合わせてファイルを出力します。

①出力対象②ソートタイプ③ファイルタイプ
グローバル関連プロセステキスト(.txt)
ルーチン関連ルーチンCSV(.csv)
ネットワーク関連グローバルエクセル(.xml)
カスタマイズデータベースHTML(.html)
ソートタイプの「着信ノード」「発信ノード」は割愛

上記組み合わせの中から、①グローバル関連 – ②プロセス – ③HTML の組み合わせが下記サンプルになります。

【サンプル】

このように、HTMLファイルで出力すると、ブラウザで確認する事も可能です。

では、いよいよ計測を開始してみましょう!

計測開始

計測の流れは次の通りです。

計測の基本的な流れ
  1. Monitor開始(Start Monitor)
  2. 対象処理を実行
  3. Monitorを一時停止(Pause)
  4. レポート出力(Report Statistics)
  5. Monitor停止(Stop Monitor)

では、ターミナルを起動して計測を開始しましょう。

計測実施

パフォーマンス・モニタ「^PERFMON」は、ネームスペース「%SYS」で実行します。

zn "%SYS"
d ^PERFMON

コマンドを入力すると、項目を選択する表示へ切り替わります。

■計測開始

「1. Start Monitor」を選択し、計測を開始しましょう。

1. Start Monitor
2. Stop Monitor
3. Pause Monitor
4. Resume Monitor
5. Sample Counters
6. Clear Counters
7. Report Statistics
8. Timed Collect & Report
 
Monitor is Stopped
 
Enter the number of your choice: 1

■各種詳細な設定

各項目で確保するスロット数を設定します。
特に問題が無ければ、全てEnterで進めます。

Processes <92>:
Routine <200>:
Globals <100>:
Databases <10>:
Network nodes <5>:
Exclude RtnLine count (reduces overhead)? <n>:
Collection will use 443KB of 200,640KB available shared memory heap.
OK to start collection? <y>:

設定が完了したら、Monitorのステータスが「Started」となります。
計測が開始されました。

1. Start Monitor
2. Stop Monitor
3. Pause Monitor
4. Resume Monitor
5. Sample Counters
6. Clear Counters
7. Report Statistics
8. Timed Collect & Report
 
Monitor is Started
 
Enter the number of your choice:

別ターミナルでコマンド実行

モニタの設定を完了させて、同じターミナルで計測を行っても問題はありません。

■今回は、以前使用した処理を再利用します。

実行します。
ターミナルのプロセスIDは7288です。

処理が完了したら、計測を終了しましょう。

計測終了とCSV出力

※Pauseを行う理由
計測中のまま出力すると、その後の不要な処理も含まれてしまう為、必要な範囲だけを正確に取得するために「一時停止」します。

■計測の一時停止

「3. Pause Monitor」を選択します。
Monitorのステータスが「Paused」となります。

1. Start Monitor
2. Stop Monitor
3. Pause Monitor
4. Resume Monitor
5. Sample Counters
6. Clear Counters
7. Report Statistics
8. Timed Collect & Report
 
Monitor is Paused
 
Enter the number of your choice:

■結果の出力

「7. Report Statistics」を選択します。
選択後、出力するための設定があります。

1. Start Monitor
2. Stop Monitor
3. Pause Monitor
4. Resume Monitor
5. Sample Counters
6. Clear Counters
7. Report Statistics
8. Timed Collect & Report
 
Monitor is Paused
 
Enter the number of your choice: 7

① 出力対象を設定します。

G (Global), R (Routine), N (Network), C (Custom)」の何れかを入力します。

Category may be: G=Global, R=Routine, N=Network or C=Custom
Category ('G', 'R', 'N' or 'C'):

② ソートタイプを設定します。

P (Process), R (Routine), G (Global), D (Database), I (Incoming), O (Outgoing)」の何れかを入力します。

Sort may be:
P=Process, R=Routine, G=Global, D=Database, I=Incoming or O=Outgoing node
Sort ('P', 'R', 'G', 'D', 'I' or 'O'):

③ ファイルタイプを設定します。

P (Print), D (Delimited data), X (Excel XML), H (HTML)」の何れかを入力します。

Format may be: P=Print, D=Delimited data, X=Excel XML, H=HTML
Format ('P', 'D', 'X', 'H'):

④ ファイル名を設定します。

デフォルトのファイル名とパスが表示されていますが、任意で命名可能です。

Default file name is:
  d:\iris\mgr\PERFMON_IRIS_20251215_213818.txt
File name:

■計測の終了

「2. Stop Monitor」を選択します。
Monitorのステータスが「Stopped」となります。

1. Start Monitor
2. Stop Monitor
3. Pause Monitor
4. Resume Monitor
5. Sample Counters
6. Clear Counters
7. Report Statistics
8. Timed Collect & Report
 
Monitor is Stopped
 
Enter the number of your choice:

ファイル出力設定

ファイルの出力設定を詳細に確認します。

①出力対象

■グローバル関連(G=Global)

グローバルに関するメトリックを出力します。
下記サンプルは、①グローバル – ②ルーチン – ③HTMLで出力しています。

■ルーチン関連(R=Routine)

ルーチンに関連したメトリックを出力します。

■ネットワーク関連(N=Network)

ネットワーク関連のメトリックを出力します。

■メトリックの選択(C=Custom)

40個のメトリックから選択し、項目を出力します。
詳細は、下記「カスタム時のメトリック選択」を参照してください。

例)「1. GloRef」「39. RtnLine」「40. RtnLoad」を選択する場合。

Category may be: G=Global, R=Routine, N=Network or C=Custom
Category ('G', 'R', 'N' or 'C'): c
List of field numbers (or '*' for all): 1,39,40

必要なメトリックのみ出力できます。

②ソートタイプ

■プロセス(P=Process)

プロセス単位で表示します。
 → すでに表示しているので割愛します。

■ルーチン(R=Routine)

動作したルーチン単位でまとめて出力されます。

■グローバル(G=Global)

操作したグローバル単位で出力されます。
どのグローバルのアクセスが多いか一目で分かりますね。

■データベース(D=Database)

アクセスしたデータベース単位でまとめて出力されます。

③ファイルタイプ

■ テキスト(P=Print)

拡張子が「.txt」で出力されます。

■ CSVファイル(D=Delimited data)

拡張子が「.csv」で出力されます。

■Excellファイル(X=Excel XML)

拡張子が「.xml」で出力されます。

■htmlファイル(H=HTML)

拡張子が「.html」で出力され、ブラウザで確認できます。
 → すでに表示しているので割愛します。

カスタム時のメトリック選択

■ポイント

項目説明
GloRef / GloSet が多いグローバルアクセスがボトルネックの可能性
BlockWait が多いバッファが競合している可能性
RtnLine が多いループ処理やロジック不可の可能性
*BlkBuf系が少なく、*BlkRd系が多いメモリが少ない可能性、もしくはランダムアクセスの可能性

■メトリックの説明

No項目説明
1GloRefグローバル参照
2GloSetグローバル登録
3GloKillグローバル削除
4TotBlkRd総合ブロック読取数
5DirBlkRdディレクトリブロック読取数
6UpntBlkRd上部ポインタブロック読取数
7BpntBlkRd下部ポインタブロック読取数
8DataBlkRdデータブロック読取数
9BdataBlkRdビックデータブロック読取数
10MapBlkRdマップブロック読取数
11OthBlkRdその他ブロック読取数
12DirBlkWtディレクトリブロック書込数
13UpntBlkWt上部ポインタブロック書込数
14BpntBlkWt下部ポインタブロック書込数
15DataBlkWtデータブロック書込数
16BdataBlkWtビックデータブロック書込数
17MapBlkWtマップブロック書込数
18OthBlkWtその他ブロック書込数
19DirBlkBufディレクトリ(グローバルバッファ)読取数
20UpntBlkBuf上部ポインタ(グローバルバッファ)読取数
21BpntBlkBuf下部ポインタ(グローバルバッファ)読取数
22DataBlkBufデータ(グローバルバッファ)読取数
23BdataBlkBufビッグデータ(グローバルバッファ)読取数
24MapBlkBufマップ(グローバルバッファ)読取数
25OthBlkBufその他(グローバルバッファ)読取数
26JrnEntryジャーナル・エントリ
27BlkAlloc割り当てられたブロック数
28BlockWaitグローバル・バッファへのアクセスを待機
29BlockWakeバッファ・リリースでアクティブにされた待機数
30RefNoGlo存在しないグローバルを検索
31KillNoData削除するものが見つからずにグローバル削除
32NetGloRefネットワーク・グローバル参照
33NetGloSetネットワーク・グローバル登録
34NetGloKillネットワーク・グローバル削除
35NetReqSent送信されたネットワーク要求
36NCacheHitネットワーク・キャッシュ・ヒット
37NCacheMissネットワーク・キャッシュ・ミス
38NetLockネットワーク・ロック
39RtnLineObjectScript の行
40RtnLoadルーチンのロード

おわりに

^PERFMON は、特定の処理だけでなく インスタンス全体の振る舞いを俯瞰できる 強力な計測ツールです。

■使い分けのイメージ

 説明
^PERFMONインスタンス全体の傾向を把握(怪しい箇所の把握)
^%SYS.MONLBL個別処理を詳細分析

このように、「全体 → 詳細」の流れで計測を実施する事で、効率的にボトルネックを特定する事ができます。

一方で、計測そのものがオーバーヘッドを伴う点には注意が必要です。

まずは、全体像を掴むための第一歩 として、^PERFMON を活用してみてください。