2013-12-16 1 views
2

У меня есть приложение JEE, развернутое на WebSphere 7 на мэйнфрейме zos. Одна из страниц выполняет большую обработку с базой данных, и запрос может занять до 6 минут, чтобы закончить и ответить. Проблема, с которой я сталкиваюсь, заключается в том, что сервер обнаруживает это как тайм-аут (зависает поток), а затем продолжает прерывать работу и перезапускать сервер. В моей среде тестирования Windows я получаю сообщение о зависании нити, но сервер приложений продолжает работать. Соединение с базой данных работает очень хорошо. Таким образом, это не похоже на таймауты из-за того, что база данных занимает много времени, чтобы ответить. Я пробовал играть с переменными WebSphere без успеха. Кто-нибудь сталкивался с подобной проблемой? Кто-нибудь знает, как решить эту проблему. Большое спасибоКак увеличить тайм-аут потока, чтобы позволить длинные потоки завершить без abend на websphere для z/os

EDIT: больше информации о проблеме.
После нити работает в течение нескольких минут я получаю следующее сообщение на консоли

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) 
+0

Что вы сделали для настройки вашей базы данных? – cschneid

+0

спасибо, я сделал все, что можно было сделать. Данные достаточно велики, чтобы получить время обработки 6 минут. Я хотел бы знать, как разрешить потоку работать до конца (максимум 8 минут) без возникновения abend. –

+0

Я хотел бы добавить, что поток выполняет много вызовов базы данных, получая некоторую обработку данных, а затем обновляя базу данных. Так что это не таймаут базы данных, ожидающий ответа на запрос –

ответ

1

Существуют различные настройки тайм-аута - на базе данных, на веб-сессии, на 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.

+0

Я пробовал различные настройки таймаута с сервером. Приложение, с которым я имею дело, представляет собой устаревшее приложение jsp, servlet. Модифицировать его пока очень сложно. Все, что я хочу, это просто предотвратить возможность отказа от сервера, установив соответствующую переменную в websphere, которая позволяет потоку запускаться больше времени, прежде чем он помечает его как висящий. –

1

Тайм-аут ITI возникает, когда область обслуживания не отвечает на область управления в течение фиксированного периода времени. См. Это blog post для получения дополнительной информации и некоторых настроек, которые можно использовать для настройки.

+0

Я пробовал это, к сожалению, к успеху. –

+0

Я хочу увеличить это «фиксированное количество времени». Я хочу, чтобы область управления давала больше времени для области слуги, чтобы завершить свою задачу. Ты знаешь как? –

+0

Отправка таймаута Улучшения в WebSphere Application Server для Z/OS Version 7 http://www-03.ibm.com/support/techdocs/atsmastr.nsf/c6192fb3a432612485256d970082de57/3c02b79e79ea32fd8625751a005d7f63/$FILE/WP101374%20-%20WebSphere% 20zOS% 20V7% 20Dispatch% 20Timeout% 20Improvements.pdf –

Смежные вопросы