WebSphere MQ入门教程(27):MQ死信队列、配置、跟踪
8.2死信队列
出于某种原因无法发送的消息都被放置在死信队列。您可以通过 MQSC 命令 DISPLAY QUEUE 来检查队列是否包含消息。如果队列包含消息,则使用所提供的浏览样本应用程序(amqsbcg)来浏览队列上的消息。样本应用程序将显示每个消息的消息描述符和消息上下文字段。您应该通过分析消息的死信头来确定消息被放在死信队列的原因。
8.3配置文件和问题确定
配置文件错误通常找不到队列管理器,和导致队列管理器不可用。确保配置文件存在,并且 WebSphere MQ 配置文件必须和队列管理器和日志目录对应。 在 Windows 注册表中的错误是在启动队列管理器时,通过消息通知的。
8.4跟踪
本节描述了如何产生WebSphere MQ跟踪信息。
8.4.1WebSphere MQ Windows的跟踪
在 WebSphere MQ Windows 版中,您可以使用 strmqtrc 控制命令启用或修改跟踪;使用 endmqtrc 控制命令停止跟踪。您还可以使用 WebSphere MQ 服务管理单元启动和停止跟踪。
8.4.1.1跟踪的选项
使用 -t 和 -x 选项控制跟踪信息量的详细程度。缺省情况下,启用所有跟踪信息。-x 选项指定不需要跟踪的信息。
例如,如果您仅跟踪队列管理器 QM1在通信网络上流动的数据,则使用:
strmqtrc -m QM1 -x all -t comms
8.4.1.2跟踪文件
在安装过程期间,您可以选择跟踪文件的存放路径。跟踪文件一般放置在目录 \<mqmwork>\errors 中,其中 <mqmwork> 是WebSphere MQ 数据文件的安装目录。
跟踪文件名的格式如下:
AMQppppp.TRC
其中 ppppp 是产生跟踪的进程的进程标识(PID)。
注:
1.进程标识号的数字位数不是固定的。
2.每个被跟踪的进程都有一个跟踪文件。
8.4.1.3跟踪数据的示例
下图显示了WebSphere MQ Windows版的跟踪数据:
Process : C:\Program Files\IBM\WebSphere MQ\bin\amqxssvn.exe
Version : 530 Level : p000-L020213
Date : 02/25/02 Time : 16:35:47
8.4.2WebSphere MQ AIX的跟踪
WebSphere MQ AIX 使用AIX系统标准跟踪。跟踪分为两步:
1.采集数据 。
2.格式化结果数据。
WebSphere MQ 使用两个跟踪 hook 标识:X'30D' 和X'30E' 。
跟踪提供了执行跟踪的详细信息来帮助您分析问题。跟踪产生的文件可能非常大,所以合理地设置跟踪。例如,您可以通过时间和组件来限定跟踪。
有两种运行跟踪的方法:
1.交互地。
以下命令是对程序 myprog 运行了交互式跟踪并结束跟踪。
2.异步地。
以下命令对程序 myprog运行了异步跟踪和结束跟踪。
您可以用以下命令格式化跟踪文件:
report.file 是存放格式化的跟踪输出的文件名。
注:
当跟踪是活动的,将跟踪所有的WebSphere MQ 活动。
8.4.2.1跟踪选项
可使用环境变量 MQS_TRACE_OPTIONS来分别激活高级详细信息和参数跟踪的功能。下表定义了MQS_TRACE_OPTIONS的各种配置的跟踪行为。
表,MQS_TRACE_OPTIONS 设置
注:
1. 最好需要在技术支持人员的指导下,设置MQS_TRACE_OPTIONS环境变量。
2. 通常在启动队列管理器之前设置MQS_TRACE_OPTIONS。
3. 在跟踪开始前设置 MQS_TRACE_OPTIONS。
8.4.2.2 SSL 跟踪
如果您请求 SSL 跟踪,请注意以下内容:
• SSL 跟踪是写到目录 /var/mqm/trace 的。
• SSL 跟踪文件是 AMQ.SSL.TRC 和 AMQ.SSL.TRC.1。
• 您无法格式化 SSL 跟踪文件;将它们原封不动地发给IBM 技术支持中心。
8.4.2.3跟踪数据的示例
下图显示了WebSphere MQ AIX跟踪的数据:
出于某种原因无法发送的消息都被放置在死信队列。您可以通过 MQSC 命令 DISPLAY QUEUE 来检查队列是否包含消息。如果队列包含消息,则使用所提供的浏览样本应用程序(amqsbcg)来浏览队列上的消息。样本应用程序将显示每个消息的消息描述符和消息上下文字段。您应该通过分析消息的死信头来确定消息被放在死信队列的原因。
8.3配置文件和问题确定
配置文件错误通常找不到队列管理器,和导致队列管理器不可用。确保配置文件存在,并且 WebSphere MQ 配置文件必须和队列管理器和日志目录对应。 在 Windows 注册表中的错误是在启动队列管理器时,通过消息通知的。
8.4跟踪
本节描述了如何产生WebSphere MQ跟踪信息。
8.4.1WebSphere MQ Windows的跟踪
在 WebSphere MQ Windows 版中,您可以使用 strmqtrc 控制命令启用或修改跟踪;使用 endmqtrc 控制命令停止跟踪。您还可以使用 WebSphere MQ 服务管理单元启动和停止跟踪。
8.4.1.1跟踪的选项
使用 -t 和 -x 选项控制跟踪信息量的详细程度。缺省情况下,启用所有跟踪信息。-x 选项指定不需要跟踪的信息。
例如,如果您仅跟踪队列管理器 QM1在通信网络上流动的数据,则使用:
strmqtrc -m QM1 -x all -t comms
8.4.1.2跟踪文件
在安装过程期间,您可以选择跟踪文件的存放路径。跟踪文件一般放置在目录 \<mqmwork>\errors 中,其中 <mqmwork> 是WebSphere MQ 数据文件的安装目录。
跟踪文件名的格式如下:
AMQppppp.TRC
其中 ppppp 是产生跟踪的进程的进程标识(PID)。
注:
1.进程标识号的数字位数不是固定的。
2.每个被跟踪的进程都有一个跟踪文件。
8.4.1.3跟踪数据的示例
下图显示了WebSphere MQ Windows版的跟踪数据:
Process : C:\Program Files\IBM\WebSphere MQ\bin\amqxssvn.exe
Version : 530 Level : p000-L020213
Date : 02/25/02 Time : 16:35:47
Counter TimeStamp Process.Thread Data
============================================================
0000062F 16:35:47.348386 6278.1 --{ InitProcessInitialisation
00000630 16:35:47.348455 6278.1 ---{ xcsCreateNTSecurityAtts
00000631 16:35:47.348516 6278.1 ----{ xcsRequestThreadMutexSem
00000632 16:35:47.348583 6278.1 ----} xcsRequestThreadMutexSem (rc=OK)
00000633 16:35:47.348639 6278.1 ----{ xcsInitGlobalSecurityData
00000634 16:35:47.349111 6278.1 ----} xcsInitGlobalSecurityData (rc=OK)
00000635 16:35:47.349239 6278.1 ----{ xcsReleaseThreadMutexSem
00000636 16:35:47.349261 6278.1 ----} xcsReleaseThreadMutexSem (rc=OK)
00000637 16:35:47.349275 6278.1 ---} xcsCreateNTSecurityAtts (rc=OK)
00000638 16:35:47.349303 6278.1 ---{ xcsReleaseThreadMutexSem
00000639 16:35:47.349319 6278.1 ---} xcsReleaseThreadMutexSem (rc=OK)
0000063A 16:35:47.349344 6278.1 --} InitProcessInitialisation (rc=OK)
0000063B 16:35:47.349359 6278.1 --{ xcsCreateThreadMutexSem
0000063C 16:35:47.349395 6278.1 --} xcsCreateThreadMutexSem (rc=OK)
0000063D 16:35:47.349872 6278.1 --{ xcsProgramInit
0000063E 16:35:47.349900 6278.1 --} xcsProgramInit (rc=OK)
0000063F 16:35:47.350027 6278.1 --{ xcsInitialize
00000640 16:35:47.350048 6278.1 ---{ xcsRequestThreadMutexSem
00000641 16:35:47.350065 6278.1 ---} xcsRequestThreadMutexSem (rc=OK)
00000642 16:35:47.350079 6278.1 ---{ xihCheckThreadList
00000643 16:35:47.350101 6278.1 ---} xihCheckThreadList (rc=OK)
00000644 16:35:47.350115 6278.1 ---{ InitPrivateServices
00000645 16:35:47.350165 6278.1 attributes 32768
00000646 16:35:47.350204 6278.1 ----{ xcsCreateThreadMutexSem
00000647 16:35:47.350233 6278.1 ----} xcsCreateThreadMutexSem (rc=OK)
00000648 16:35:47.350255 6278.1 pid MQ(6) system(6278)
00000649 16:35:47.350337 6278.1 ---} InitPrivateServices (rc=OK)
0000064A 16:35:47.350360 6278.1 --{ xxxInitialize
0000064B 16:35:47.350977 6278.1 ---{ xcsGetMem
============================================================
0000062F 16:35:47.348386 6278.1 --{ InitProcessInitialisation
00000630 16:35:47.348455 6278.1 ---{ xcsCreateNTSecurityAtts
00000631 16:35:47.348516 6278.1 ----{ xcsRequestThreadMutexSem
00000632 16:35:47.348583 6278.1 ----} xcsRequestThreadMutexSem (rc=OK)
00000633 16:35:47.348639 6278.1 ----{ xcsInitGlobalSecurityData
00000634 16:35:47.349111 6278.1 ----} xcsInitGlobalSecurityData (rc=OK)
00000635 16:35:47.349239 6278.1 ----{ xcsReleaseThreadMutexSem
00000636 16:35:47.349261 6278.1 ----} xcsReleaseThreadMutexSem (rc=OK)
00000637 16:35:47.349275 6278.1 ---} xcsCreateNTSecurityAtts (rc=OK)
00000638 16:35:47.349303 6278.1 ---{ xcsReleaseThreadMutexSem
00000639 16:35:47.349319 6278.1 ---} xcsReleaseThreadMutexSem (rc=OK)
0000063A 16:35:47.349344 6278.1 --} InitProcessInitialisation (rc=OK)
0000063B 16:35:47.349359 6278.1 --{ xcsCreateThreadMutexSem
0000063C 16:35:47.349395 6278.1 --} xcsCreateThreadMutexSem (rc=OK)
0000063D 16:35:47.349872 6278.1 --{ xcsProgramInit
0000063E 16:35:47.349900 6278.1 --} xcsProgramInit (rc=OK)
0000063F 16:35:47.350027 6278.1 --{ xcsInitialize
00000640 16:35:47.350048 6278.1 ---{ xcsRequestThreadMutexSem
00000641 16:35:47.350065 6278.1 ---} xcsRequestThreadMutexSem (rc=OK)
00000642 16:35:47.350079 6278.1 ---{ xihCheckThreadList
00000643 16:35:47.350101 6278.1 ---} xihCheckThreadList (rc=OK)
00000644 16:35:47.350115 6278.1 ---{ InitPrivateServices
00000645 16:35:47.350165 6278.1 attributes 32768
00000646 16:35:47.350204 6278.1 ----{ xcsCreateThreadMutexSem
00000647 16:35:47.350233 6278.1 ----} xcsCreateThreadMutexSem (rc=OK)
00000648 16:35:47.350255 6278.1 pid MQ(6) system(6278)
00000649 16:35:47.350337 6278.1 ---} InitPrivateServices (rc=OK)
0000064A 16:35:47.350360 6278.1 --{ xxxInitialize
0000064B 16:35:47.350977 6278.1 ---{ xcsGetMem
8.4.2WebSphere MQ AIX的跟踪
WebSphere MQ AIX 使用AIX系统标准跟踪。跟踪分为两步:
1.采集数据 。
2.格式化结果数据。
WebSphere MQ 使用两个跟踪 hook 标识:X'30D' 和X'30E' 。
跟踪提供了执行跟踪的详细信息来帮助您分析问题。跟踪产生的文件可能非常大,所以合理地设置跟踪。例如,您可以通过时间和组件来限定跟踪。
有两种运行跟踪的方法:
1.交互地。
以下命令是对程序 myprog 运行了交互式跟踪并结束跟踪。
trace -j30D,30E -o trace.file
->!myprog
->q
->!myprog
->q
2.异步地。
以下命令对程序 myprog运行了异步跟踪和结束跟踪。
trace -a -j30D,30E -o trace.file
myprog
trcstop
myprog
trcstop
您可以用以下命令格式化跟踪文件:
trcrpt -t /usr/mqm/lib/amqtrc.fmt trace.file > report.file
report.file 是存放格式化的跟踪输出的文件名。
注:
当跟踪是活动的,将跟踪所有的WebSphere MQ 活动。
8.4.2.1跟踪选项
可使用环境变量 MQS_TRACE_OPTIONS来分别激活高级详细信息和参数跟踪的功能。下表定义了MQS_TRACE_OPTIONS的各种配置的跟踪行为。
表,MQS_TRACE_OPTIONS 设置
MQS_TRACE_OPTIONS值 |
跟踪信息 |
取消设置(缺省值) |
缺省跟踪(除高级详细信息之外的所有跟踪) |
0 |
没有WebSphere MQ跟踪 |
262148 |
入口,出口和参数跟踪 |
786436 |
入口,出口、参数和高级详细信息跟踪 |
4980740 |
入口,出口、参数、高级详细信息和SSL跟踪 |
3407871 |
不带参数跟踪的缺省跟踪 |
3670015 |
缺省跟踪,包含参数跟踪 |
7864319 |
缺省跟踪,包含参数跟踪和SSL跟踪 |
4194303 |
所有跟踪,包含高级详细信息跟踪 |
注:
1. 最好需要在技术支持人员的指导下,设置MQS_TRACE_OPTIONS环境变量。
2. 通常在启动队列管理器之前设置MQS_TRACE_OPTIONS。
3. 在跟踪开始前设置 MQS_TRACE_OPTIONS。
8.4.2.2 SSL 跟踪
如果您请求 SSL 跟踪,请注意以下内容:
• SSL 跟踪是写到目录 /var/mqm/trace 的。
• SSL 跟踪文件是 AMQ.SSL.TRC 和 AMQ.SSL.TRC.1。
• 您无法格式化 SSL 跟踪文件;将它们原封不动地发给IBM 技术支持中心。
8.4.2.3跟踪数据的示例
下图显示了WebSphere MQ AIX跟踪的数据:
ID ELAPSED_SEC DELTA_MSEC APPL SYSCALL KERNEL INTERRUPT
30D 0.000000000 0.000000 MQS FNC Entry. 71540.1 zcpSendOnPipe
30E 0.000000038 0.000038 Msg Unencumbered (T/F)(0)
30D 0.000000176 0.000138 MQS FNC Exit............. 51604.55
aqhCheckMsgUnencumbered rc=00000000
30E 0.000000418 0.000242 aqhCheckMsgChains : internal retcode
208007d3
30D 0.000000516 0.000098 MQS FNC Entry.. 71540.14 xcsWaitEventSem
30E 0.000000590 0.000074 MessageSent (24 bytes)
30E 0.000000847 0.000257 aqhCheckMsgChains : internal retcode
208007d3
30E 0.000000936 0.000089 hev=1::0::0-307724 TimeOut(-1)
30E 0.000001173 0.000237 aqhCheckMsgChains : internal retcode
208007d3
30D 0.000001313 0.000140 MQS FNC Entry............ 51604.55
aqtIdxToSpcFn
30D 0.000001395 0.000082 MQS FNC Exit............. 51604.55
aqtIdxToSpcFn rc=00000000
30D 0.000001439 0.000044 MQS FNC Entry........ 36124.51
xcsCheckProcess
30D 0.000001501 0.000062 MQS FNC Entry............ 51604.55
aqhCheckMsgUnencumbered
30E 0.000001645 0.000144 MQS Data from zcpSendOnPipe Length=0018
5A525354 000007E5 00000000 00000000
ZRST 00000000 00000000
30E 0.000001765 0.000120 pBCrsr (0)
30D 0.000001907 0.000142 MQS FNC Entry............. 51604.55
aqhInTrans
30D 0.000001997 0.000090 MQS FNC Exit.............. 51604.55
aqhInTrans rc=00000000
30D 0.000002025 0.000028 MQS FNC Entry.. 71540.1 xcsResetEventSem
30E 0.000002243 0.000218 Msg Unencumbered (T/F)(0)
30D 0.000002363 0.000120 MQS FNC Exit............. 51604.55
aqhCheckMsgUnencumbered rc=00000000
30E 0.000002392 0.000029 hev=1::0::0-305876
30D 0.000002522 0.000130 MQS FNC Entry... 71540.14 xlsLockEvent
30E 0.000002630 0.000108 aqhCheckMsgChains : internal retcode
208007d3
30D 0.000000000 0.000000 MQS FNC Entry. 71540.1 zcpSendOnPipe
30E 0.000000038 0.000038 Msg Unencumbered (T/F)(0)
30D 0.000000176 0.000138 MQS FNC Exit............. 51604.55
aqhCheckMsgUnencumbered rc=00000000
30E 0.000000418 0.000242 aqhCheckMsgChains : internal retcode
208007d3
30D 0.000000516 0.000098 MQS FNC Entry.. 71540.14 xcsWaitEventSem
30E 0.000000590 0.000074 MessageSent (24 bytes)
30E 0.000000847 0.000257 aqhCheckMsgChains : internal retcode
208007d3
30E 0.000000936 0.000089 hev=1::0::0-307724 TimeOut(-1)
30E 0.000001173 0.000237 aqhCheckMsgChains : internal retcode
208007d3
30D 0.000001313 0.000140 MQS FNC Entry............ 51604.55
aqtIdxToSpcFn
30D 0.000001395 0.000082 MQS FNC Exit............. 51604.55
aqtIdxToSpcFn rc=00000000
30D 0.000001439 0.000044 MQS FNC Entry........ 36124.51
xcsCheckProcess
30D 0.000001501 0.000062 MQS FNC Entry............ 51604.55
aqhCheckMsgUnencumbered
30E 0.000001645 0.000144 MQS Data from zcpSendOnPipe Length=0018
5A525354 000007E5 00000000 00000000
ZRST 00000000 00000000
30E 0.000001765 0.000120 pBCrsr (0)
30D 0.000001907 0.000142 MQS FNC Entry............. 51604.55
aqhInTrans
30D 0.000001997 0.000090 MQS FNC Exit.............. 51604.55
aqhInTrans rc=00000000
30D 0.000002025 0.000028 MQS FNC Entry.. 71540.1 xcsResetEventSem
30E 0.000002243 0.000218 Msg Unencumbered (T/F)(0)
30D 0.000002363 0.000120 MQS FNC Exit............. 51604.55
aqhCheckMsgUnencumbered rc=00000000
30E 0.000002392 0.000029 hev=1::0::0-305876
30D 0.000002522 0.000130 MQS FNC Entry... 71540.14 xlsLockEvent
30E 0.000002630 0.000108 aqhCheckMsgChains : internal retcode
208007d3