![[AIX]](../ngaix.gif)
在 AIX 上标识问题的特征
需要考虑的一些初始问题,以帮助确定问题的原因。
关于本任务
在核对该列表的过程中,请记下可能与问题相关的所有信息。 即使您的观察结果没有直接表明原因,但如果您需要进行系统的问题确定练习,那么这些观察结果可能会在稍后有用。
当您使用 IBM提交案例时,可以包含为帮助调查问题而收集的其他 IBM MQ 故障诊断信息 (MustGather 数据)。 更多信息,请参阅收集故障排除信息。
过程
- IBM MQ 之前是否已成功运行?如果 IBM MQ 之前未成功运行,那么您可能尚未正确设置该值。 有关更多信息,请参阅 IBM MQ 安装概述 和 在 AIX上安装和卸载 IBM MQ。
要运行验证过程,请参阅 在 AIX上验证 IBM MQ 安装。 另请参阅 配置 IBM MQ 以获取有关 IBM MQ安装后配置的信息。
- 自上次成功运行以来是否进行了任何更改?对 IBM MQ 配置进行的更改或对与 IBM MQ 交互的其他应用程序进行的更改可能是问题的原因。在考虑最近可能进行的更改时,请考虑 IBM MQ 系统以及它与之交互的其他程序,硬件和任何新应用程序。 还要考虑可能已经在系统上运行的您不知道的新的应用程序的可能性。
- 您已经更改、添加或删除了任何队列定义吗?
- 您已经更改或添加了任何通道定义吗? 可能已对 IBM MQ 通道定义或应用程序所需的任何底层通信定义进行了更改。
- 您的应用程序会处理那些因为您所做的更改而得到的返回码吗?
- 是否更改了操作系统中可能影响 IBM MQ操作的任何组件?
- 您是否应用了任何维护更新?如果已将维护更新应用到 IBM MQ,请检查更新操作是否成功完成以及是否未生成错误消息。
- 更新有任何特殊的说明吗?
- 运行了验证是否正确和完整的应用了该更新的测试吗?
- 如果将 IBM MQ 复原到先前的维护级别,那么问题是否仍然存在?
- 如果安装成功,请与 IBM 支持人员联系以了解任何维护包错误。
- 如果已将维护包应用于任何其他应用程序,请考虑它对 IBM MQ 与其交互的方式可能产生的影响。
- 应用程序以前运行成功吗?如果问题似乎涉及一个特定应用程序,请考虑该应用程序之前是否已成功运行:
- 自从上次成功运行以来,对应用程序做了什么更改吗?
如果做了,错误可能位于应用程序新的或修改过的部分的某一处。 检查该更改并看以下您是否可以找到明显的问题原因。 有可能重试使用以前级别的应用程序吗?
- 应用程序的所有功能以前都运用过吗?
问题可能是在第一次使用以前从未调用的应用程序的一部分时发生的吗? 如果是,那么可能错误是位于应用程序的这一部分的。 尝试找出应用程序失败时在做什么,并检查该程序的这一部分的源代码以找出错误。 如果程序已经在以前许多的场合中成功运行,那么检查当前队列状态和错误发生时正在处理的文件。 有可能它们包含一些不常见的调用程序中难得使用的路径的数据值。
- 应用程序检查所有返回码吗?
是否已更改 IBM MQ 系统 (可能以轻微方式更改) ,从而使应用程序不会检查由于更改而接收到的返回码。 例如,您的应用程序是否假设其访问的队列是可以共享的吗? 如果队列已被重新定义为独占的,您的应用程序能否处理表明其不再可访问该队列的返回码吗?
- 应用程序是否在其他 IBM MQ 系统上运行?
难道设置此 IBM MQ 系统的方式与导致问题的方式不同吗? 例如,已经用相同的消息长度或优先级定义了队列吗?
在查看代码之前,根据代码所使用的编程语言,检查转换程序或编译器和链接编辑器的输出,以查看是否报告了任何错误。 如果您的应用程序转换、编译或链接编辑到装入库失败,则如果您尝试调用它也会运行失败。 有关构建应用程序的信息,请参阅 开发应用程序。
如果文档显示这些步骤中的每一步都是正确完成的,则考虑应用程序的编码逻辑。 问题的症状是否指示此功能失败,并因此指示此代码段出错? 以下列表中的错误说明了运行 IBM MQ 程序时迂到问题的最常见原因。 请考虑 IBM MQ 系统问题可能由以下一个或多个错误引起的可能性:- 假定可以共享队列,而实际上这些队列是独占的。
- 在 MQI 调用中传递了不正确的参数。
- 在 MQI 调用中传递的参数不足。 这可能意味着 IBM MQ 无法设置应用程序要处理的完成代码和原因码。
- 无法检查来自 MQI 请求的返回码。
- 传递指定了不正确的长度的变量。
- 以错误的顺序传递参数。
- 无法正确地初始化
MsgId和CorrelId。 - MQRC_TRUNCATED_MSG_ACCEPTED 后的
Encoding和CodedCharSetId初始化失败。
- 自从上次成功运行以来,对应用程序做了什么更改吗?
- 在某些命令的描述性文本中使用特殊字符时,是否会收到错误?某些字符,例如反斜杠 (\) 和双引号 (") 与命令配合使用时,字符具有特殊含义。
在特殊字符前面加上
\,即,如果您需要文本中的\或",请输入\\或\"。 并不是所有字符都可用于命令。 有关具有特殊含义的字符以及如何使用这些字符的更多信息,请参阅 具有特殊含义的字符。 - 是否有任何错误消息或返回码可帮助您确定问题的位置和原因?IBM MQ 使用错误日志来捕获有关其自己的操作,启动的任何队列管理器以及来自正在使用的通道的错误数据的消息。 检查错误日志查看是否已经记录了与问题相关的任何消息。 有关错误日志的位置和内容的信息,请参阅 AIX, Linux和 Windows 上的错误日志。
对于每个 IBM MQ 消息队列接口 (MQI) 和 IBM MQ 管理接口 (MQAI) 调用,队列管理器或出口例程将返回完成代码和原因码,以指示调用成功或失败。 如果应用程序得到返回码指示消息队列接口 (MQI) 调用失败,请检查原因码找出有关该问题的更多信息。 有关原因码的列表,请参阅 API 完成代码和原因码。 每个 MQI 调用的描述中均包含有关返回码的详细信息。
- 是否可以重现问题?如果您可以重现问题,那么考虑重现它的条件:
- 是由命令或等效的管理请求引起的吗? 如果由另一种方法输入,操作是否有效呢? 如果在命令行输入时命令有效,但在其他情况下无效,应确保命令服务器未停止并且 SYSTEM.ADMIN.COMMAND.QUEUE 的队列定义未更改。
- 是由程序引起的吗? 是在所有 IBM MQ 系统和所有队列管理器上失败,还是仅在某些系统上失败?
- 当问题发生时,您可以标识任何总好象在系统中运行的应用程序吗? 如果可以,检查应用程序以查看它是否存在错误。
- 问题是否影响网络的特定部分?是否进行了任何可能导致问题的网络相关更改或更改了任何 IBM MQ 定义?您可能能够识别受问题影响的网络特定部分 (例如,远程队列)。 如果到远程消息队列管理器的链接不起作用,那么消息无法流向远程队列。
- 请检查两个系统之间的连接是否可用,以及 IBM MQ 的相互通信组件是否已启动。
- 检查该消息正到达传输队列,并检查传输队列和任何远程队列的本地队列定义。
- 问题是否在一天中的特定时间发生?如果问题发生在一天中的特定时间,那么可能与系统负载有关。 通常,系统负载峰值是在上午的中间时段和下午的中间时段发生的,因此在这此时段很可能发生与负载相关的问题。
如果 IBM MQ 网络跨多个时区扩展,那么高峰系统装入可能似乎在一天中的其他时间发生。
- 问题是否为间歇性?间歇性的问题可能由可以互相独立运行的进程引起。 例如,完成较早的进程前,程序可能没有指定等待选项就发出 MQGET 调用。 如果应用程序在落实放入消息的调用前尝试从队列取出消息,那么也可能出现间歇性的问题。