Sun Java System Message Queue 3.7 UR1 管理指南

客户端无法建立连接

症状:

可能的原因:

可能的原因:客户端应用程序不关闭连接,导致连接数超出资源限制。

确认问题的起因:列出代理的所有连接:

imqcmd list cxn

输出结果将列出所有连接以及发起每个连接的主机,从而显示具体是哪些客户端的打开连接数超出限制。

解决此问题:重写有问题的客户端,以关闭未使用的连接。

可能的原因:代理未运行或者网络连接有问题。

确认问题的起因:

解决此问题:

可能的原因:连接服务处于非活动状态或者已暂停。

确认问题的起因:检查所有连接服务的状态:

imqcmd list svc

如果某个连接服务的状态显示为 unknownpaused,客户端将无法使用该服务建立连接。

解决此问题:

可能的原因:相对于所需的连接数而言,可用线程数不足。

确认问题的起因:在代理日志中检查下面的条目:

警告 [B3004]:服务上没有可以用来处理新连接的线程...关闭新连接。

此外,请检查连接服务上的连接数以及当前使用的线程数(使用以下格式之一):

imqcmd query svc -n serviceName imqcmd metrics svc -n serviceName -m cxn

每个连接都需要两个线程:一个用于传入消息,另一个用于传出消息(请参见线程池管理)。

解决此问题:

可能的原因:相对于 Solaris 或 Linux 平台上需要的连接数而言,文件描述符不足。

有关此问题的详细信息,请参见设置文件描述符限制

确认问题的起因:在代理日志中查找与下面显示的条目类似的条目:

打开了太多文件

解决此问题:增大文件描述符限制,如 ulimit 手册页中所述。

可能的原因:TCP 后备队列限制了可以同时建立的新连接请求的数目。

TCP 后备队列限制可以同时存储在系统后备队列 (imq.portmapper.backlog) 中的连接请求数,超过此限制后,端口映射器将拒绝额外的请求。(在 Windows 平台上,有一种硬编码的后备队列限制:Windows 台式机限制为 5,而 Windows 服务器限制为 200。)

出于后备队列限制而拒绝请求通常是一种由于同时连接请求数过多而导致的瞬态现象。

确认问题的起因:检查代理日志。首先,检查代理是否在接受某些连接的同时拒绝其他连接。其次,检查说明拒绝连接原因的消息。如果找到此类消息,则说明问题可能不是由 TCP 后备队列引起的,因为代理不记录由于 TCP 后备队列而引起的连接拒绝事件。如果记录了一些成功连接,但未记录任何连接拒绝事件,则问题可能是由 TCP 后备队列引起的。

解决此问题:

可能的原因:操作系统限制了并发连接数。

Windows 操作系统许可证对支持的并发远程连接数进行了限制。

确认问题的起因:检查是否有可用于连接的足够线程(使用 imqcmd query svc),并检查您的 Windows 许可协议的条款。如果您可以从本地客户端建立连接,但不能从远程客户端建立连接,则操作系统的限制可能就是问题的起因。

解决此问题:

可能的原因:对用户的验证或授权失败。

验证可能因为以下原因失败:

确认问题的起因:检查代理日志中的条目,查看是否有 Forbidden 错误消息。此消息指明存在验证错误,但不会指明该错误的原因。

解决此问题: