2016-09-06 118 views
1

最近我们将MQ服务器升级到8.0.0.5,之后我们的应用程序无法运行。从服务器控制台获取以下错误日志。 获得在Servlet终止,原因如下消息 - MQRC_NO_MSG_AVAILABLEWebsphere挂起线程 - MQ升级

*********************STACK TRACE************************ 
com.ibm.mq.MQException: MQJE001: Completion Code '2', Reason '2033'. 
     at com.ibm.mq.MQDestination.getInt(MQDestination.java:683) 
     at com.ibm.mq.MQDestination.get(MQDestination.java:473) 
     at support.operations.inventory.mq.MQFWServlet.getMessage(MQFWServlet.java:77) 
     at support.operations.inventory.mq.MQFWServlet.init(MQFWServlet.java:115) 
     at support.operations.inventory.list.InvOnlineList.fetchData(InvOnlineList.java:75) 
     at support.operations.inventory.servlets.SearchServlet.verifiedPost(SearchServlet.java:169) 
     at support.operations.inventory.servlets.MasterServlet.doPost(MasterServlet.java:439) 
     at support.operations.inventory.servlets.MasterServlet.doGet(MasterServlet.java:363) 
     at javax.servlet.http.HttpServlet.service(HttpServlet.java:575) 
     at javax.servlet.http.HttpServlet.service(HttpServlet.java:668) 
     at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1232) 
     at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:781) 
     at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:480) 
     at com.ibm.ws.webcontainer.servlet.ServletWrapperImpl.handleRequest(ServletWrapperImpl.java:178) 
     at com.ibm.ws.webcontainer.filter.WebAppFilterManager.invokeFilters(WebAppFilterManager.java:1114) 
     at com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.dispatch(WebAppRequestDispatcher.java:1385) 
     at com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.forward(WebAppRequestDispatcher.java:194) 
     at support.operations.inventory.servlets.MasterServlet.forwardServlet(MasterServlet.java:621) 
     at support.operations.inventory.servlets.ReRouteServlet.verifiedPost(ReRouteServlet.java:254) 
     at support.operations.inventory.servlets.MasterServlet.doPost(MasterServlet.java:439) 
     at support.operations.inventory.servlets.MasterServlet.doGet(MasterServlet.java:363) 
     at javax.servlet.http.HttpServlet.service(HttpServlet.java:575) 
     at javax.servlet.http.HttpServlet.service(HttpServlet.java:668) 
     at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1232) 
     at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:781) 
     at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:480) 
     at com.ibm.ws.webcontainer.servlet.ServletWrapperImpl.handleRequest(ServletWrapperImpl.java:178) 
     at com.ibm.ws.webcontainer.filter.WebAppFilterManager.invokeFilters(WebAppFilterManager.java:1114) 
     at com.ibm.ws.webcontainer.webapp.WebApp.handleRequest(WebApp.java:3928) 
     at com.ibm.ws.webcontainer.webapp.WebGroup.handleRequest(WebGroup.java:304) 
     at com.ibm.ws.webcontainer.WebContainer.handleRequest(WebContainer.java:1007) 
     at com.ibm.ws.webcontainer.WSWebContainer.handleRequest(WSWebContainer.java:1817) 
     at com.ibm.ws.webcontainer.channel.WCChannelLink.ready(WCChannelLink.java:200) 
     at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleDiscrimination(HttpInboundLink.java:463) 
     at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleNewRequest(HttpInboundLink.java:530) 
     at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.processRequest(HttpInboundLink.java:316) 

从WebSphere日志,我可以看到这个errror消息:

[8/31/16 14:40:11:249 GMT] 000000a9 ThreadMonitor W WSVR0605W: Thread "WebContainer : 3" (000000e5) has been active for 603065 milliseconds and may be hung. There is/are 2 
thread(s) in total in the server that may be hung. 
     at java.lang.Object.wait(Native Method) 
     at java.lang.Object.wait(Object.java:196) 

我需要针对此问题的帮助。

回答

2
  1. NO_MSG_AVAILABLE(2033)只意味着 - 你的应用程序发出的一个MQGET并没有消息被发现(满足选择标准,包括消息ID /关联ID和/或任何其他如果未指定任何内容。)

  2. 我想冒险猜你发出一个MQGETMQGMO_WAIT,并且你设置超时值为一个相当高的值(或UNLIMITED。)。由于没有消息可用,你最终挂起线程。不是MQ,而是应用程序本身。

总之,在这些消息中我看不到任何MQ错误。像往常一样升级或环境中的任何变化,检查还有什么改变。检查发件人发生了什么情况。

避免在Web容器中长时间等待(当然,UNLIMITED已超出范围)理想情况下,请异步执行此操作。或者至少限制等待时间 - 例如,按照经验法则,15秒的超时是充足的。如果您的后端在15秒内无法响应,则说明有问题。许多Web应用程序甚至不能容忍15秒的延迟。

0

我看你正在做酒吧/小组。如果订阅时间少于2.5秒,我已经看到了一些非常漂亮的东西。对于MQ v7.5.0.5和MQ v8.0.0.4,我都有过这种感觉。目前,我用了5秒,一切都很好。

我强烈建议您使用IBM打开PMR。