【IRIS】【計測関連】システム単位でアレコレ計測しよう(コマンド実行)

本記事では、計測シリーズの一環として「^PERFMON」を使用し、コマンド実行によるデータ収集方法について解説します。

※この記事は下記の方向けになります。
  • システム(インスタンス)単位で計測を行いたい方
  • システム全体のボトルネック箇所を特定したい方
  • 毎回ターミナルを起動する手間を省きたい方

はじめに

^PERFMON については、前回の記事で紹介しています。
詳細は以下をご参照ください。

※出力内容などの詳細については、本記事では割愛します。

今回は、^PERFMON をコマンドから実行する方法を解説します。
毎回ターミナルから設定・出力を行うのが煩雑に感じる場合は、ぜひ本手法をお試しください。

全体の流れ

まずは、全体の処理フローを確認します。

^PREFMONの流れ
  1. Start Monitor(開始)
  2. [計測中]
  3. Pause Monitor(一時停止)
  4. Report Statistics(レポート出力)
  5. Stop Monitor(停止)

コマンドで実行すると、以下のようになります。

zn "%SYS"
d $$Start^PERFMON() // ① Start Monitor

// 計測中

d $$Pause^PERFMON() // ③ Pause Monitor
d $$Report^PERFMON("R","P","P","D:\Temp\csv\sample.txt") // ④ Report Statistics
d $$Stop^PERFMON() // ⑤ Stop Monitor

それでは、各処理について順に確認していきます。

開始(Start Monitor)

最初に計測の開始です。

実行するネームスペースは「%SYS」になります。

zn "%SYS"
s flg = $$Start^PERFMON([process],[routine],[global],[database],[network])
項目説明
processプロセス用スロット数(デフォルト:プロセステーブル数)
routineルーチン用スロット数(デフォルト:200)
globalグローバル用スロット数(デフォルト:100)
databaseデータベース用スロット数(デフォルト:10)
networkネットワークノード数(デフォルト:5)

※ターミナル実行時に表示される設定値が、そのまま引数として指定可能です。

戻り値の「flg」は%Integer型です。

戻り値説明
1成功
-1他のユーザが実行中
-2実行中
-3メモリの割り当てに失敗
-4上記以外でのエラー

■連続実行した時の各戻り値を確認

一時停止(Pause Monitor)

一時停止は引数なしで実行できます。

s flg = $$Pause^PERFMON()
戻り値説明
1成功
-1他のユーザが実行中
-2開始していない
-3既に停止中

■連続実行した時の各戻り値を確認

レポート出力(Report Statistics)

計測結果をファイルとして出力します。

s flg = $$Report^PERFMON([report],[sort],[format],[output],[list],[data])

// サンプル
w $$Report^PERFMON("R","P","P","D:\Temp\csv\sample.txt")

どのようなファイルが出力できるのかは、前回の記事を参照してください。

引数説明
report出力するレポートの種類 – 必須
G:グローバル動作, R:ルーチン動作, N:ネットワーク動作, C:カスタム
sortレポートのグループ分けと並べ替えの順序 – 必須
P:プロセス, R:ルーチン, G:グローバル, D:データベース, I:着信ノード, O:発信ノード
format出力形式 – 必須
P:テキスト, D:CSV, X:エクセル, H:HTML
outputファイル名 – 必須
ファイル名を入力する or 0(画面出力) or 未指定(規定ファイル名)
listreport=C (カスタム)選択時
メトリックの番号をカンマ区切りで記述する
dataレポートするデータの種類
1:1 秒あたりの標準比率, 0:未加工の合計データ

ファイル出力に慣れるまでは、エラーをよく見る事になると思います。
戻り値から、何が問題なのかが分かりやすいので、うまく出力できない場合は、戻り値を確認して下さい。

戻り値説明
1成功
-1未実行
-2引数がない
-3カテゴリの設定値に問題あり
-4ソートの設定値に問題あり
-5ファイルタイプの設定値に問題あり
-6[list]の設定値に問題あり
-7データの形式に不正あり

停止(Stop Monitor)

最後に計測を停止します。

s flg = $$Stop^PERFMON()
戻り値説明
1成功
-1他のユーザが実行中
-2開始していない

■連続実行した時の各戻り値を確認

その他

測定値のクリア

s flg = $$Clear^PERFMON()
戻り値説明
1成功
-1他のユーザが実行中
-2開始していない

■クリア>停止>クリアの順に実行した際の戻り値を確認

Collect

指定時間内でパフォーマンスデータを自動収集します。

s flg = $$Clear^PERFMON([time],[format],[output])
引数説明
time収集時間(デフォルト:30秒)
formatHTML : HTMLファイル
※XMLはデフォルトのため省略可能
outputファイル名(フルパス)
ファイル名を入力する or 0(画面出力) or 未指定(規定ファイル名)

Collectは、1つのファイルに下記データ種をまとめて出力します。

出力されるデータ種
  • Global metrics per Global
  • Global metrics per Routine
  • Routine metrics per Routine
  • Routine metrics per Process
  • Global metrics per Process
  • Process List

【サンプルファイル】
下記は、「Global metrics per Global」の一部です。

Global metrics per Routine

おわりに

今回は、^PERFMON をターミナル操作ではなく、コマンドから実行する方法について解説しました。

^PERFMON はインスタンス全体の挙動を把握するための強力な計測ツールですが、ターミナル操作に依存すると運用負荷が高くなりがちです。

本記事で紹介したコマンド実行を活用することで、以下のような運用が可能になります。

  • バッチ処理への組み込み
  • 定期ジョブによる自動計測
  • 検証環境での継続的な性能分析

ボトルネック調査・チューニングの第一歩として、ぜひ活用してみてください。

最後までお読みいただき、ありがとうございました。