目次に戻る パフォーマンス・レポート機能

起動されたアプリケーションの細かい動作をレポートとして出力する機能の説明です。

パフォーマンス・レポート
パフォーマンス・レポート機能は、起動されたNOMADアプリケーションのプログラム的な流れや処理にかかった時間などをファイル(dsmcgi.pr)に出力する機能です。

レポートできる項目として以下のものがあります。

DSMCGI実行の経過時間、CPU時間、メモリー使用量。
B/NOMAD実行の経過時間、CPU時間、メモリー使用量。
プロシージャとエントリーコールのトレース(最大15階層)。
プロシージャとエントリーコールの経過時間、CPU時間、メモリー使用量。
リモートSQLのトレース。
リモートSQL実行の経過時間、CPU時間、メモリー使用量。


パフォーマンス・レポート設定書式


設定ファイル「dsm.ini」の[DSMPR]セクションにパフォーマンス・レポートのパラメータを設定します。
レポートの結果はdsmcgi.prに書き込まれます(すべてのレポート対象・アプリケーション共通)。
prEachBnomad=ONを設定することにより、B/NOMADごとにdsmcgi.pr?(dsmcgi.pr0、dsmcgi.pr1...)ファイルに分けて書き込むこともできます。


UNIXの場合、「dsmcgi.pr」ファイルに書き込み権限がない場合(DSMにより、「dsmcgi.pr」ファイルが新規に生成される場合など)は、レポートファイルに情報が出力されないことがあります。
「chmod 666 dsmcgi.pr」でレポートファイルの書き込み権限を有効にするようにしてください。



[DSMPR]
PerformReport=ON
prTargetApp=App1:App2:App3
prCallProcLevel=2
prRemoteSQL=ON
prEachBnomad=ON
MaxPrSizeMB=2



dsmコンソールにおけるパフォーマンス・レポート操作

コンソール上でdsmを使用することにより、パフォーマンス・レポートファイルの参照と削除が可能です。


dsm /lp dsmcgi.prファイルをエディタで開きます。
dsm /lp1 dsmcgi.pr1ファイルをエディタで開きます。
dsm /lpd dsmcgi.prファイルを削除します。
dsm /lp1d dsmcgi.pr1ファイルを削除します。



レポートフォーマット
レポートファイルの内容を例をあげて説明します。


[DSMPR]
PerformReport=ON
prCallProcLevel=10
MaxPrSizeMB=1


パフォーマンス・レポートのパラメータを上記のように設定し、STG3000というNOMADアプリケーション(アプリケーションIDはSTG3000_APP)を実行したときの「dsmcgi.pr」に出力された内容は以下の通りです。
B/NOMADセッションの0番目を使用し、「stg3_prf.nom」をCALLした後に「stg3000.nom」をCALLしています。
STG3000 - STG3000_START - DEC_VARIABLES ...のように順にCALLしている様子を、「-> CALL」「<- CALL」の組み合わせで見ることができます。



Mon Aug 23 17:09:04.995[438]: => dsmcgi     sid='192.168.0.156_935395745438' app='STG3000_APP'
Mon Aug 23 17:09:05.125[438]:   -> call B/NOMAD[0]
Mon Aug 23 17:09:05.275[438]:     >> B/NOMAD[0][0] (stg3_prf)
Mon Aug 23 17:09:05.285[438]:       -> CALL 'STG3_PRF.STG3_PRF'
Mon Aug 23 17:09:05.315[438]:       <- CALL 'STG3_PRF.STG3_PRF'                  ELP=   30ms CPU=   10ms+    0ms MEM= 7448K
Mon Aug 23 17:09:05.315[438]:     << B/NOMAD[0][0] ELP=   40ms CPU=   10ms+   10ms MEM= 7448K
Mon Aug 23 17:09:05.325[438]:   <- call B/NOMAD[0] ELP=  200ms CPU=   20ms+   10ms MEM= 1720K
Mon Aug 23 17:09:05.355[438]:   -> call B/NOMAD[0]
Mon Aug 23 17:09:05.385[438]:     >> B/NOMAD[0][0] (purge stg3_get_form otw;&STG3_IPNOMADPROC='stg3000';call stg3000.stg3000)
Mon Aug 23 17:09:05.396[438]:       -> CALL 'STG3000.STG3000'
Mon Aug 23 17:09:05.426[438]:         -> CALL 'STG3000.STG3000_START'
Mon Aug 23 17:09:05.426[438]:           -> CALL 'STG3000.DEC_VARIABLES'
Mon Aug 23 17:09:05.426[438]:           <- CALL 'STG3000.DEC_VARIABLES'          ELP=    0ms CPU=    0ms+    0ms MEM= 7556K
Mon Aug 23 17:09:05.426[438]:           -> CALL 'STG3000.DB_ACTIVE'
Mon Aug 23 17:09:05.426[438]:           <- CALL 'STG3000.DB_ACTIVE'              ELP=    0ms CPU=    0ms+    0ms MEM= 7556K
Mon Aug 23 17:09:05.426[438]:         <- CALL 'STG3000.STG3000_START'            ELP=    0ms CPU=    0ms+    0ms MEM= 7556K
Mon Aug 23 17:09:05.436[438]:         -> CALL 'STG3_GET_FORM.STG3_GET_FORM'
Mon Aug 23 17:09:05.456[438]:         <- CALL 'STG3_GET_FORM.STG3_GET_FORM'      ELP=   20ms CPU=   20ms+    0ms MEM= 7688K
Mon Aug 23 17:09:05.456[438]:         -> CALL 'STG3000.ITP_HDL_ACTION'
Mon Aug 23 17:09:05.466[438]:           -> CALL 'STG3000.FACTPBUTACT_A480'
Mon Aug 23 17:09:05.466[438]:             -> CALL 'STG3010.STG3010'
Mon Aug 23 17:09:05.556[438]:               -> CALL 'STG3010.STG3010_START'
Mon Aug 23 17:09:05.556[438]:                 -> CALL 'STG3010.DEC_VARIABLES'
Mon Aug 23 17:09:05.566[438]:                 <- CALL 'STG3010.DEC_VARIABLES'    ELP=   10ms CPU=    0ms+    0ms MEM= 7924K
Mon Aug 23 17:09:05.566[438]:                 -> CALL 'STG3010.DB_ACTIVE'
Mon Aug 23 17:09:05.566[438]:                 <- CALL 'STG3010.DB_ACTIVE'        ELP=    0ms CPU=    0ms+    0ms MEM= 7924K
Mon Aug 23 17:09:05.566[438]:               <- CALL 'STG3010.STG3010_START'      ELP=   10ms CPU=    0ms+   11ms MEM= 7924K
Mon Aug 23 17:09:05.566[438]:               -> CALL 'STG3010.ITP_HDL_ACTION'
Mon Aug 23 17:09:05.566[438]:                 -> CALL 'STG3010.INITIAL_SET_SUB'
Mon Aug 23 17:09:05.566[438]:                 <- CALL 'STG3010.INITIAL_SET_SUB'  ELP=    0ms CPU=    0ms+    0ms MEM= 7924K
Mon Aug 23 17:09:05.576[438]:               <- CALL 'STG3010.ITP_HDL_ACTION'     ELP=   10ms CPU=   10ms+    0ms MEM= 7924K
Mon Aug 23 17:09:05.576[438]:               -> CALL 'STG3010.ITP_UPD_HTMLOUT'
Mon Aug 23 17:09:05.726[438]:               <- CALL 'STG3010.ITP_UPD_HTMLOUT'    ELP=  150ms CPU=   40ms+   30ms MEM= 7932K
Mon Aug 23 17:09:05.726[438]:             <- CALL 'STG3010.STG3010'              ELP=  260ms CPU=   50ms+   41ms MEM= 7932K
Mon Aug 23 17:09:05.726[438]:           <- CALL 'STG3000.FACTPBUTACT_A480'       ELP=  260ms CPU=   50ms+   41ms MEM= 7932K
Mon Aug 23 17:09:05.726[438]:         <- CALL 'STG3000.ITP_HDL_ACTION'           ELP=  270ms CPU=   60ms+   41ms MEM= 7932K
Mon Aug 23 17:09:05.726[438]:       <- CALL 'STG3000.STG3000'                    ELP=  330ms CPU=  100ms+   41ms MEM= 7932K
Mon Aug 23 17:09:05.736[438]:     << B/NOMAD[0][0] ELP=  351ms CPU=  120ms+   51ms MEM= 7932K
Mon Aug 23 17:09:05.746[438]:   <- call B/NOMAD[0] ELP=  391ms CPU=   10ms+   20ms MEM= 1732K
Mon Aug 23 17:09:05.776[438]: <= dsmcgi            ELP=  781ms CPU=   70ms+  190ms MEM= 1744K
	


アプリケーションの1回分の処理(トランザクション)は、dsmcgi.pr上では、「=> dsmcgi」で始まり「<= dsmcgi」で終了します。
上記のレポートでは、781ms(最後の行の ELP=781ms 参照)で1回の処理が完了したことになります。

パラメータの意味は以下のようになります。

ELP:経過時間(elapse)。単位はms。
CPU:CPU時間 = ユーザーが使用したCPU時間 + システムが使用したCPU時間。単位はms。
MEM:その時点のプロセス・メモリーサイズ(KB)。

すべて時間関連のパラメータは入り口(=>、->、>>)でリセットされ、出口(<=、<-、<<)で計測した値を出力します。