今天检查环境运行日志,发现一个异常信息,具体如下:
发送消息到主题出错,Error producing message for destination, 即在通过程序朝JMS消息主题里面发送消息的时候出现错误,这个提示看起来也是相当明确,即在朝JMS消息主题里面写入消息的时候出现故障,但是界面上提升的异常只有这么多信息。
于是还是去查找JMS Sever本身的Log日志,发现从JMS Server本身的Log日志来看,并没有看到任何明显的异常信息。而该JMS消息写入是通过调用OSB封装后的WS服务来完成的,经过排查服务日志,发现该消息是在某一个时间段偶尔出现了几次,而其它大部分调用仍然是正确的。
进一步排查服务器本身的Log日志,发现了出现过线程池满的警告信息,但是该警告信息原来也出现过,即提升信息为MaxThread is reached,而实际上这个服务本身的调用量并不大,具体什么原因导致触发到最大线程数暂时也很难查清楚。一个可能的原因是我们本身集群有42个节点,即对于JMS Server存在42个活动连接,如果每个连接都跑了多个线程,则容易达到最大线程数限制。但是看了下JMS Server上的设置,这个最大线程数设置为1000,应该是很难达到这值。
对于JMS服务的调用,进一步排查发现该时间段的错误全部产生在某一台OSB Sever节点上,于是去获取该节点的OSB Log日志进一步分析,在该Log日志上基本才找到具体详细的错误提升信息,具体为:
[2018-09-16T20:21:16.541+08:00][NOTIFICATION] [] [oracle.osb.debug.transports] [tid: [ACTIVE].ExecuteThread: '37' for queue: 'weblogic.kernel.Default (self-tuning)'] [userId: ] [ecid: bbb0fea9-5133-4ab9-8705-d86fb369a4e3-00002369,0] [APP: Service Bus Kernel] [partition-name: DOMAIN] [tenant-name: GLOBAL] [FlowId: 0000MNYKz1V9h^k5wzK6yW1RaoZ500005s] LoadBalanceFailoverHelper.sendMessageToServiceAsync[[
从这里来关键信息为 LoadBalanceFailoverHelper.sendMessageToServiceAsync但是根据这个关键信息进一步搜索,仍然没有找到合适的解释。
Caused by: weblogic.jms.common.JMSException: Error producing message for destination
at weblogic.utils.StackTraceDisabled.unknownMethod()
Caused by: weblogic.messaging.dispatcher.DispatcherException: could not find Server null
Caused by: javax.naming.NameNotFoundException: Unable to resolve 'weblogic.messaging.dispatcher.S:null'
Resolved 'weblogic.messaging.dispatcher'; remaining name 'S:null'
基于以上关键字信息进一步搜索,在Oracle Support网站查到一个关键信息如下:
https://support.oracle.com/epmos/faces/DocumentDisplay?_afrLoop=206929002947743&parent=EXTERNAL_SEARCH&sourceId=PROBLEM&id=2394315.1&_afrWindowMode=0&_adf.ctrl-state=16pmqvu8ww_193
从该文章说明是Oracle的一个补丁程序,而且适用版本是Oracle Service Bus - Version 12.2.1.3.0 and later。由于该服务调用异常是偶尔出现,出现的频率相对低,因此暂时不确定是否真是该Bug的影响,具体还要进一步咨询Oracle顾问。