MQ GTFトレースを読めるようになるには
素人でもMQODとMQMDとMQGMOとMQPMOくらいは読めるようになる。
どういう情報を見てトレースを読めばいいかということを書いてみる。
要領としては3点
- 項目数を理解する
- 項目に使われるバイト長を理解する
- ビットで理解する
このWSTEに出てくる値を材料に説明しようと思う。
IBM Open Mic Replay: WebSphere MQ Problem Diagnostics - Reading Traces - United States
トレースの値に良い材料がないから、MQMDとMQGMOの見方のみを書きます。
ほな、MQMDからいってみよう。
MQMD – Message descriptor
Initial values and language declarations for MQMD
USRD9 5EA ASCB 00FADA00 JOBN LAURANEG CSQW073I EXIT: MQ user parameter trace +0000 D4C44040 00000002 00000000 00000008 | MD ............ | +0010 FFFFFFFF 00000000 00000311 000001F4 | ................ | +0020 D4D8E2E3 D9404040 00000000 00000001 | MQSTR ........ | +0030 D4D8E3D7 E4E361F2 F0F1F0F0 F3F0F9F2 | MQTPUT/201003092 | +0040 F3F0F3F5 F4F6F9F1 D4D8E3D7 E4E361F2 | 30354691MQTPUT/2 | +0050 F0F1F0F0 F3F0F9F2 F3F0F3F5 F4F6F9F1 | 0100309230354691 | +0060 00000000 40404040 40404040 40404040 | | +0070 40404040 40404040 40404040 40404040 | | +0080 40404040 40404040 40404040 40404040 | | +0090 40404040 D9E3D7C8 40404040 40404040 | RTPH | +00A0 40404040 40404040 40404040 40404040 | | +00B0 40404040 40404040 40404040 40404040 | |
上記の値を細かく分割していきたいと思います。
分割するバイト数は、各項目のバイト長に応じてます。
MQCHAR4なら4バイト、MQLONGも4バイトです。
+0000 D4C44040 :StrucId (MQCHAR4) MQMD_* (Message descriptor structure) MQMD_STRUC_ID +0000 00000002 :Version (MQLONG) MQMD_* (Message descriptor structure) MQMD_VERSION_2 +0000 00000000 :Report (MQLONG) MQRO_* (Report Options) MQRO_NONE +0000 00000008 :MsgType (MQLONG) MQMT_* (Message Types) MQMT_DATAGRAM +0010 FFFFFFFF :Expiry (MQLONG) MQEI_UNLIMITED +0010 00000000 :Feedback (MQLONG) MQFB_* (Feedback Values) MQFB_NONE +0010 00000311 :Encoding (MQLONG) MQENC_* (Encoding) MQENC_NATIVE z/OSのはX'00000311'=785 +0010 000001F4 :CodedCharSetId (MQLONG) MQCCSI_* (Coded Character Set Identifiers) 500 +0020 D4D8E2E3 D9404040 :Format (MQCHAR8) MQFMT_* (Formats) MQFMT_STRING +0020 00000000 :Priority (MQLONG) MQPRI_* (Priority) +0020 00000001 :Persistence (MQLONG) MQPER_* (Persistence Values) MQPER_PERSISTENT +0030 D4D8E3D7 E4E361F2 F0F1F0F0 F3F0F9F2 :MsgId (MQBYTE24) +0040 F3F0F3F5 F4F6F9F1 MQMI_* (Message Identifier) MQTPUT/20100309230354691 +0040 D4D8E3D7 E4E361F2 :CorrelId (MQBYTE24) +0040 F0F1F0F0 F3F0F9F2 F3F0F3F5 F4F6F9F1 MQCI_* (Correlation Identifier) MQTPUT/20100309230354691 +0050 00000000 :BackoutCount (MQLONG) +0050 40404040 40404040 40404040 :ReplyToQ (MQCHAR48) +0060 40404040 40404040 40404040 40404040 +0070 40404040 40404040 40404040 40404040 +0080 40404040 +0080 D9E3D7C8 40404040 40404040 :ReplyToQMgr (MQCHAR48) +0090 40404040 40404040 40404040 40404040 +00A0 40404040 40404040 40404040 40404040 +00B0 40404040 +00B0 40404040 40404040 40404040 :UserIdentifier (MQCHAR12)
GTFトレースに出てくるのはココまでっぽいですが、MQMD自体はまだ続きます。
MQのTRACEの出力先 DEST(RES)にしてダンプを取ってれば、
おそらくはpMsgDesc. 13B596B0から値が見れるのではないかと思う。
先頭についてるpはポインターのpだろう。
次はMQGMO。
MQGMO – Get-message options
Initial values and language declarations for MQGMO
CSQW073I EXIT: MQ user parameter trace +0000 C7D4D640 00000001 00006021 00000000 | GMO ......-..... | +0010 FF000000 00000000 D3C1E4D9 C14BD8D3 | ........LAURA.QL |
同じく、細かく分けていく。
+0000 C7D4D640 :StrucId (MQCHAR4) MQGMO_* (Get message options structure) MQGMO_STRUC_ID +0000 00000001 :Version (MQLONG) MQGMO_* (Get message options structure) MQGMO_VERSION_1 +0000 00006021 :Options (MQLONG) MQGMO_* (Get Message Options) X'00004000' : MQGMO_CONVERT X'00002000' : MQGMO_FAIL_IF_QUIESCING X'00000020' : MQGMO_BROWSE_NEXT X'00000001' : MQGMO_WAIT +0000 00000000 :WaitInterval (MQLONG) MQWI_* (Wait Interval) +0010 FF000000 :Signal1 (MQLONG) MQEC_* (Signal Values) +0010 00000000 :Signal2 (MQLONG) +0010 D3C1E4D9 C14BD8D3 :ResolvedQName (MQCHAR48)
少しデータが中途半端なところで終わってますが、だいたいこんな具合に見れば読めます。
Optionsの箇所は、ビットが立ってるところを見る必要があるので面倒ですが、そこは慣れでしょう。
他には、右側に出てくる文字列の元データがASCIIの場合はどう読むか。
ASCII primary command — display characters as ASCII
EBCDIC primary command — display characters as EBCDIC
GTFトレースで出てくるコントロールブロックについては一覧がある。
The control blocks traced
GTFトレースの中で出てくる読み解けないものは多くあるが、
モジュールの分類を理解しておくと、扱ってるデータは分からなくてもフローは分かるようになる。
WebSphere MQ component and resource manager identifiers