
本記事は、計測シリーズとして「^PERFMON」を利用したデータ収集について解説します。
はじめに
^PERFMONは、インスタンス全体のイベントを集計します。
この機能も、「^%SYS.MONLBL」と同様に計測を行う為、処理速度が若干低下します。
その為、本番環境にて実行する際は、よく検討して実行して下さい。
この機能を使えば、システム全体の動きが把握できるため、ボトルネックになっている箇所を探すのに役にたつと思います。
^PERFMONの最大の特徴は、「個別処理ではなく、インスタンス全体の振る舞いを横断的に可視化できる」点です。
では、先ずはどのような計測値が出力できるか確認してみましょう。
どんな内容が出力される?
^PERFMONでは、下記3つの要素を組み合わせてファイルを出力します。
| ①出力対象 | ②ソートタイプ | ③ファイルタイプ |
|---|---|---|
| グローバル関連 | プロセス | テキスト(.txt) |
| ルーチン関連 | ルーチン | CSV(.csv) |
| ネットワーク関連 | グローバル | エクセル(.xml) |
| カスタマイズ | データベース | HTML(.html) |
上記組み合わせの中から、①グローバル関連 – ②プロセス – ③HTML の組み合わせが下記サンプルになります。
【サンプル】

このように、HTMLファイルで出力すると、ブラウザで確認する事も可能です。
では、いよいよ計測を開始してみましょう!
計測開始
計測の流れは次の通りです。
では、ターミナルを起動して計測を開始しましょう。
計測実施
パフォーマンス・モニタ「^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 | 項目 | 説明 |
|---|---|---|
| 1 | GloRef | グローバル参照 |
| 2 | GloSet | グローバル登録 |
| 3 | GloKill | グローバル削除 |
| 4 | TotBlkRd | 総合ブロック読取数 |
| 5 | DirBlkRd | ディレクトリブロック読取数 |
| 6 | UpntBlkRd | 上部ポインタブロック読取数 |
| 7 | BpntBlkRd | 下部ポインタブロック読取数 |
| 8 | DataBlkRd | データブロック読取数 |
| 9 | BdataBlkRd | ビックデータブロック読取数 |
| 10 | MapBlkRd | マップブロック読取数 |
| 11 | OthBlkRd | その他ブロック読取数 |
| 12 | DirBlkWt | ディレクトリブロック書込数 |
| 13 | UpntBlkWt | 上部ポインタブロック書込数 |
| 14 | BpntBlkWt | 下部ポインタブロック書込数 |
| 15 | DataBlkWt | データブロック書込数 |
| 16 | BdataBlkWt | ビックデータブロック書込数 |
| 17 | MapBlkWt | マップブロック書込数 |
| 18 | OthBlkWt | その他ブロック書込数 |
| 19 | DirBlkBuf | ディレクトリ(グローバルバッファ)読取数 |
| 20 | UpntBlkBuf | 上部ポインタ(グローバルバッファ)読取数 |
| 21 | BpntBlkBuf | 下部ポインタ(グローバルバッファ)読取数 |
| 22 | DataBlkBuf | データ(グローバルバッファ)読取数 |
| 23 | BdataBlkBuf | ビッグデータ(グローバルバッファ)読取数 |
| 24 | MapBlkBuf | マップ(グローバルバッファ)読取数 |
| 25 | OthBlkBuf | その他(グローバルバッファ)読取数 |
| 26 | JrnEntry | ジャーナル・エントリ |
| 27 | BlkAlloc | 割り当てられたブロック数 |
| 28 | BlockWait | グローバル・バッファへのアクセスを待機 |
| 29 | BlockWake | バッファ・リリースでアクティブにされた待機数 |
| 30 | RefNoGlo | 存在しないグローバルを検索 |
| 31 | KillNoData | 削除するものが見つからずにグローバル削除 |
| 32 | NetGloRef | ネットワーク・グローバル参照 |
| 33 | NetGloSet | ネットワーク・グローバル登録 |
| 34 | NetGloKill | ネットワーク・グローバル削除 |
| 35 | NetReqSent | 送信されたネットワーク要求 |
| 36 | NCacheHit | ネットワーク・キャッシュ・ヒット |
| 37 | NCacheMiss | ネットワーク・キャッシュ・ミス |
| 38 | NetLock | ネットワーク・ロック |
| 39 | RtnLine | ObjectScript の行 |
| 40 | RtnLoad | ルーチンのロード |
おわりに
^PERFMON は、特定の処理だけでなく インスタンス全体の振る舞いを俯瞰できる 強力な計測ツールです。
■使い分けのイメージ
| 説明 | |
|---|---|
| ^PERFMON | インスタンス全体の傾向を把握(怪しい箇所の把握) |
| ^%SYS.MONLBL | 個別処理を詳細分析 |
このように、「全体 → 詳細」の流れで計測を実施する事で、効率的にボトルネックを特定する事ができます。
一方で、計測そのものがオーバーヘッドを伴う点には注意が必要です。
まずは、全体像を掴むための第一歩 として、^PERFMON を活用してみてください。


