MVSには、GTF(Generalized Trace Facility)と呼ばれる汎用トレース機能があります。MVS自身やアプリケーション・プログラムなどの動作を、システム・レベルでトレースする機能です。一般のプログラムのデバッグには向きませんが、アセンブラー言語で作成されたシステム系プログラムなどの動きを追跡したりする目的で利用することもできます。GTFではトレースする項目をイベントと呼び、イベントには下記のようなものがあります。
その他、ユーザー・プログラムでデータを書き込むこともできます。
GTFは、余程のことがない限り一般のユーザーが自ら使うことはありませんが、基盤系ソフトやISV製品などに問題があると考えられる時にメーカーやベンダーの依頼でトレースを採ることがありますので、使い方は知っておいた方がいいでしょう。トレースの採取やフォーマットのパラメーターについては、依頼する人が必要なものを提示しますからユーティリティ名や基本のJCLコーディングなどがわかれば十分です。
GTF起動プロシージャ・サンプル
1 2 3 4 5 6 7 8 9 10 11 |
//GTF PROC //IEFPROC EXEC PGM=AHLGTF,REGION=2880K,TIME=1440, // PARM='MODE=EXT,TIME=YES,DEBUG=NO' //IEFRDER DD DISP=SHR,DSN=SYS1.TRACE //GTF PROC //IEFPROC EXEC PGM=AHLGTF,REGION=2880K,TIME=1440, // PARM='MODE=EXT,TIME=YES,DEBUG=NO' //GTFOUT01 DD DISP=SHR,DSN=USR1.GTFDATA1 //GTFOUT02 DD DISP=SHR,DSN=USR1.GTFDATA2 //GTFOUT03 DD DISP=SHR,DSN=USR1.GTFDATA3 |
トレースデータセットの作成
1 2 3 |
//TRACE1 DD DISP=(,CATLG),DSN=USR1.GTFDATA1, // UNIT=SYSDA,VOL=SER=WRKVOL, // SPACE=(CYL,50),DCB=DSORG=PS |
トレース・データを格納するデータセットは、IEFRDERまたはGTFOUTnn DDステートメントで定義します。長時間トレースを採取する場合、1つのデータセットでは足りなくなることがあります。そのような場合は、複数のトレース・データセットを定義して利用できます。1つであっても複数であっても、利用可能なデータセットが一杯になると先頭のデータセットから循環使用されます。新規にトレース・データセットを作成する場合は、PSデータセットとして容量のみを指定します(DCBにDSORG=PSを指定しないとGTFの起動は失敗する)。レコード形式、ブロック長とレコード長は、GTFが起動時に設定し直します。
GTFの起動操作
S GTF起動プロシージャ名.GTF (トレースオプションの入力を促すMSGが出る)
nn,トレースオプション (MSGに従って追加のトレースオプションを入力する)
[nn,追加のトレースオプション]
nn,U
※GTFは同時に複数起動することはできません。プロシージャ名を変えてもだめです。
GTFトレース・オプションの例
SVCトレースを採る
nn,TRACE=SVCP,JOBNAMEP
nn,SVC=(48,56),JOBNAME=xxxxxxxx,END
nn,U
特定のジョブに関してのみトレースする場合は、JOBNAMEPオプションが利用できる。
I/Oトレースを採る
nn,TRACE=IOP,SSCHP,CCWP
nn,IO=SSCH=205
nn,CCW=(SI,DATA=1024)
nn,END
nn,U
アドレス205のデバイスのI/O動作をトレースする例。
VTAM送受信データのトレースを採る
nn,TRACE=USRP
nn,USR=FEF
nn,END
nn,U
F NET|VTAM,TRACE,TYPE=BUF,ID=LU名,AMOUNT=FULL端末を使って
トレースしたい処理を行う
F NET|VTAM,NOTRACE,TYPE=BUF,ID=LU名
LU名で指定された端末とホスト間のVTAM送受信データをトレースする例。
IBM製品(TSOなど)に関しては、セキュリティー上の理由で送受信データに関してはトレースされない場合がある(各製品の起動パラメーターなどの調整が必要)。
トレース・データのフォーマットJCLサンプル
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
// JOB Statement //IPCS EXEC PGM=IKJEFT01 //SYSPROC DD DISP=SHR,DSN=SYS1.SBLSCLI0 //SYSUT1 DD DISP=SHR,DSN=トレースデータセット名 //SYSTSPRT DD SYSOUT=* //IPCSPRNT DD SYSOUT=* //SYSTSIN DD * DEFINE CLUSTER(NAME('TMP1.IPCS.DIRECTRY') VOL(WRKVOL)) - INDEX(NAME('TMP1.IPCS.DIRINDEX') CYLINDERS(1 1)) - DATA(NAME('TMP1.IPCS.DIRDATA') CYLINDERS(4 1) - KEYS(128 0) CONTROLINTERVALSIZE(4096)) ALLOC F(IPCSDDIR) DA('TMP1.IPCS.DIRECTRY') IPCSDDIR 'TMP1.IPCS.DIRECTRY' NOCONFIRM IPCS NOPARM SETDEF DDNAME(SYSUT1) NOCONFIRM GTF USR(FEF) END DELETE 'TMP1.IPCS.DIRECTRY' CLUSTER // |
IPCSでGTFサブコマンドを指定すれば、トレース・データをフォーマットして印刷できます。VTAMなどUSRイベントとしてトレースされたものは、サンプルのようにUSRパラメーターを指定します。SVCやI/Oなどのシステム・トレースの場合、GTF採取時にフィルタリングしていれば、単にGTFと書けばデータセット内の全レコードがフォーマットされます。
関連マニュアル
「zOS MVS:対話式問題管理システム(IPCS)コマンド」