Websphere挂起线程 - 使用MQ升级

时间:2016-09-06 11:16:29

标签: websphere ibm-mq

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

*********************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日志中我可以看到这个错误消息:

[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 个答案:

答案 0 :(得分:2)

  1. NO_MSG_AVAILABLE(2033)就是这样 - 您的应用程序发出MQGET并且未找到任何消息(满足选择条件,包括消息ID /相关ID和/或其他任何其他内容任何事都被指定。)

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

  3. 简而言之,我在这些消息中看不到MQ的任何问题。与升级或环境中的任何更改一样,检查还有哪些更改。检查邮件发件人的情况。

    并且避免在Web容器中等待很长时间(当然UNLIMITED超出范围。)理想情况下,异步执行。或者至少限制等待 - 例如,15秒的超时是充足的,作为一个经验法则。如果您的后端在15秒内无法响应,则表示出现问题。许多Web应用程序甚至不会容忍15秒的延迟。

答案 1 :(得分:0)

我看到你在做Pub / Sub。如果获得订阅的时间少于2.5秒,我会看到一些相当不稳定的东西。对于MQ v7.5.0.5和MQ v8.0.0.4,我已经把它挂在我身上了。目前,我使用5秒钟,一切都很好。

我强烈建议您与IBM一起开启PMR。