java - 如何增加线程超时以允许长时间运行的线程在 z/os 的 websphere 上完成而不会异常结束

标签 java jakarta-ee websphere mainframe

我在 zos 大型机上的 WebSphere 7 上部署了一个 JEE 应用程序。其中一个页面对数据库进行了大量处理,请求可能需要长达 6 分钟才能完成并响应。我面临的问题是服务器检测到超时(线程挂起),然后继续异常结束服务并重新启动服务器。 在我的 Windows 测试环境中,我收到线程挂起消息,但应用程序服务器继续工作。数据库连接工作得很好。所以它不会因为数据库需要很长时间来响应而超时。 我尝试使用 WebSphere 变量但没有成功。 有人遇到过类似的问题吗?有谁知道如何解决这个问题。 非常感谢

编辑:有关该问题的更多信息。
线程工作几分钟后,我在控制台上收到以下消息

  Trace: 2013/12/16 14:56:57.849 01 t=8C6E88 c=UNK key=P8 (13007002)             
      ThreadId: 0000006d                                                           
      FunctionName: com.ibm.ws390.interrupt.InterruptibleThreadObject              
      SourceId: com.ibm.ws390.interrupt.InterruptibleThreadObject                  
      Category: INFO                                                               
      ExtendedMessage: BBOJ0113I: The Interruptible Thread Infrastructure is attempting to advance work running under request fffc77cb 
    Trace: 2013/12/16 14:56:57.850 01 t=8C6E88 c=UNK key=P8 (00000011)             
      Description: Log Java Message                                                
      Message: BBOJ0113I: The Interruptible Thread Infrastructure is attempting to advance work running under request fffc77cb 
    Trace: 2013/12/16 14:56:57.871 01 t=8C7AD0 c=UNK key=P8 (13007002)             
      ThreadId: 0000005a                                                           
       FunctionName: com.ibm.ejs.j2c.ConnectionEventListener                        
      SourceId: com.ibm.ejs.j2c.ConnectionEventListener                            
       Category: WARNING                                                            
       ExtendedMessage: BBOO0221W: J2CA0206W: A connection error occurred.  To help determine the problem, enable the Diagnose Connection Usage option on the Connection Factory or Data Source.                        
     Trace: 2013/12/16 14:56:57.872 01 t=8C7AD0 c=UNK key=P8 (00000011)             
       Description: Log Java Message                                                
       Message: BBOO0221W: J2CA0206W: A connection error occurred.  To help determine the problem, enable the Diagnose Connection Usage option on the Connection Factory or Data Source.                        
     ption on the Connection Factory or Data Source.                                
     Trace: 2013/12/16 14:56:57.873 01 t=8C7AD0 c=UNK key=P8 (13007002)             
       ThreadId: 0000005a                                                           
       FunctionName: com.ibm.ejs.j2c.ConnectionEventListener                        
       SourceId: com.ibm.ejs.j2c.ConnectionEventListener                            
       Category: AUDIT                                                              
       ExtendedMessage: BBOO0222I: J2CA0056I: The Connection Manager received a fatal connection error from the Resource Adapter for resource jdbc/mofaz19. The exception is: com.ibm.db2.jcc.b.un: A communication error occurred during operations on the connection's underlying socket, socket input stream, or socket output stream.  Error location: Reply.fill().  Message: Socket closed ERRORCODE=-4499, SQLSTATE=08001:java.net.SocketException: Socket closed

几秒钟后,服务器异常终止并重新启动。最后一条消息如下

Trace: 2013/12/16 11:48:49.543 01 t=8C9BF8 c=UNK key=P8 (13007002)              
  ThreadId: 00000363                                                            
  FunctionName: com.ibm.ws390.orb.CommonBridge                                  
  SourceId: com.ibm.ws390.orb.CommonBridge                                      
  Category: SEVERE                                                              
  ExtendedMessage: BBOJ0117I: JAVA THREAD STACK TRACEBACK FOR THREAD WebSphere:ORB.thread.pool t=008c4950:
  Thread Hang Recovery--thread could not be encouraged to complete 
  Traceback for thread WebSphere:ORB.thread.pool t=008c4950:                   
  java.net.SocketInputStream.socketRead0(Native Method)                        
  java.net.SocketInputStream.read(SocketInputStream.java:141)                  
  com.ibm.db2.jcc.t4.ab.b(ab.java:195)                                         
  com.ibm.db2.jcc.t4.ab.c(ab.java:243)                                         
  com.ibm.db2.jcc.t4.ab.c(ab.java:354)                                         
  com.ibm.db2.jcc.t4.ab.v(ab.java:1139)                                        
  com.ibm.db2.jcc.t4.bb.c(bb.java:167)                                         
  com.ibm.db2.jcc.t4.r.c(r.java:42)                                            
  com.ibm.db2.jcc.t4.b.Cb(b.java:2514)                                         
  com.ibm.db2.jcc.b.jb.s(jb.java:1136)                                         
  com.ibm.db2.jcc.b.jb.q(jb.java:1097)                                         
  com.ibm.db2.jcc.t4.b.q(b.java:4726)                                          
  com.ibm.db2.jcc.b.jb.p(jb.java:1072)                                         
  com.ibm.db2.jcc.b.jb.rollback(jb.java:1060)                                  
  com.ibm.db2.jcc.b.we.rollback(we.java:176)                                   
  com.ibm.ws.rsadapter.jdbc.WSJdbcConnection.rollback(WSJdbcConnection.java:331              
  .........................
  .........................
  myCompany.MyServlet.doPost(MyServlet.java:59)        
  javax.servlet.http.HttpServlet.service(HttpServlet.java:738)                 
  javax.servlet.http.HttpServlet.service(HttpServlet.java:831)                 
  com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1583)
  com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:870)
  com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:475)
  com.ibm.ws.webcontainer.servlet.ServletWrapperImpl.handleRequest(ServletWrapper.java:91)
  com.ibm.ws.webcontainer.servlet.CacheServletWrapper.handleRequest(CacheServletWrapper.java:91)
  com.ibm.ws.webcontainer.WebContainer.handleRequest(WebContainer.java:863)    
  com.ibm.ws.webcontainer.WSWebContainer.handleRequest(WSWebContainer.java:1583)
  com.ibm.ws.webcontainer.channel.WCChannelLink.ready(WCChannelLink.java:182)  
  com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleDiscrimination(HttpInboundLink.java:455)
  com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleNewInformation(HttpInboundLink.java:384)
  com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.ready(HttpInboundLink.java:272)
  com.ibm.ws390.channel.xmem.XMemConnLink.ready(XMemConnLink.java:844)         
  com.ibm.ws390.channel.xmem.XMemInboundChannel.handleRequest(XMemInboundChannel.java:340)
  com.ibm.ws390.xmem.XMemSRBridgeImpl.httpinvoke(XMemSRBridgeImpl.java:104)    
  com.ibm.ws390.xmem.XMemSRCppUtilities.httpinvoke(XMemSRCppUtilities.java:74) 
  com.ibm.ws390.orb.ServerRegionBridge.httpinvoke(ServerRegionBridge.java:215) 
  com.ibm.ws390.orb.ORBEJSBridge.httpinvoke(ORBEJSBridge.java:281)             
  sun.reflect.GeneratedMethodAccessor50.invoke(Unknown Source)                 
  sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:101)
  java.lang.reflect.Method.invoke(Method.java:600)                             
  com.ibm.ws390.orb.parameters.HTTPInvoke.HTTPInvokeParmSetter(HTTPInvoke.java:101)
  com.ibm.ws390.orb.CommonBridge.nativeRunApplicationThread(Native Method)     
  com.ibm.ws390.orb.CommonBridge.runApplicationThread(CommonBridge.java:463)   
  com.ibm.ws.util.ThreadPool$ZOSWorker.run(ThreadPool.java:1750)

最佳答案

有不同的超时设置 - 数据库、Web session 、http 服务器等。

这里是超时设置之一http://publib.boulder.ibm.com/infocenter/tivihelp/v2r1/index.jsp?topic=%2Fcom.ibm.tspm.doc_7.1%2Finstall%2Ftask%2FConfigureTransactionLifetimeTimeout.html 但还有很多其他的。

常见的建议是设计您的应用程序而无需等待 http 上的同步响应。您可以使用 MDB、MQ、WorkManager、TaskScheduler,无论你喜欢什么。在前端 AJAX 调用上。

关于java - 如何增加线程超时以允许长时间运行的线程在 z/os 的 websphere 上完成而不会异常结束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20609244/

相关文章:

java - Eclipse警告: Cannot be null?

java - parseJSON 将在有效 JSON 上抛出错误

java - 无法从 Swing 客户端创建初始上下文

java - WebSphere,多场 war 的相同上下文根

java - NoSuchMethodError org.apache.http.conn.scheme.Scheme

websphere - 信任应用程序(而不是用户)发布到任何用户的事件流

java - 为什么下面的代码中出现错误 "Syntax error on token "println", = Expected"?

java - Poi-ooxml-schema 源或仅用于文档的 jar

java - android应用程序中的计算功能导致强制关闭,这里出了什么问题?

java - 如何多次读取 request.getInputStream()