Xpoint
   [напомнить пароль]

getConnection() стала выдавать ошибку при увеличении числа пользователей

Метки: [без меток]
2007-05-31 04:51:56 [обр] lik[досье]
сообщение промодерировано

Добрый день!
При увеличении числа пользователей java выдаёт ошибку и tomcat валится. Насколько я понял это происходит при создании connection, функция getConnection(). Два раза делали реорганизацию базы данных (DB2) и после каждого раза ошибка выдавалась гораздо реже, но через несколько дней опять вылазит. Ошибка появилась при увеличении пользователей с ~80 до ~ 140. Tomcat валится 3-10 раз в день. Ниже приведен кусок лога tomcat:

#
# An unexpected error has been detected by Java Runtime Environment:
#
#  EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x7c82f350, pid=1292, tid=2288
#
# Java VM: Java HotSpot(TM) Client VM (1.6.0-b105 mixed mode, sharing)
# Problematic frame:
# C  [ntdll.dll+0x2f350]
#
# If you would like to submit a bug report, please visit:
#   http://java.sun.com/webapps/bugreport/crash.jsp
#

---------------  T H R E A D  ---------------

Current thread (0x02ac3800):  JavaThread "http-8081-18" daemon [_thread_in_native, id=2288]

siginfo: ExceptionCode=0xc0000005, writing address 0x00000008

Registers:
EAX=0x00000000, EBX=0x00000000, ECX=0x00000008, EDX=0x00000004
ESP=0x0476ea18, EBP=0x0476ea24, ESI=0x00000008, EDI=0x00000000
EIP=0x7c82f350, EFLAGS=0x00010297

Top of Stack: (sp=0x0476ea18)
0x0476ea18:   00000000 00000000 00000008 0476ea40
0x0476ea28:   4bfa4c16 00000004 0345196c 4bf727af
0x0476ea38:   0345196c 03451948 0476ea78 4bf78af9
0x0476ea48:   0345196c 4bfa0000 02ac38e8 26dc3ae8
0x0476ea58:   0476fb68 00000000 0476ea4c 0476e644
0x0476ea68:   0476fb68 4bfa5705 4bf78ac8 ffffffff
0x0476ea78:   0476ea90 4bf78a9d 03451948 0476eab0
0x0476ea88:   02bae000 02ac38e8 0476eaa8 6d3f11cb 

Instructions: (pc=0x7c82f350)
0x7c82f340:   56 8d 72 04 57 89 75 fc b8 00 00 00 00 8b 4d fc
0x7c82f350:   f0 0f b3 01 0f 92 c0 84 c0 0f 84 95 0f 00 00 64 


Stack: [0x04730000,0x04770000),  sp=0x0476ea18,  free space=250k
Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
C  [ntdll.dll+0x2f350]
C  [ODBC32.dll+0x34c16]
C  [ODBC32.dll+0x8af9]
C  [ODBC32.dll+0x8a9d]
C  [JdbcOdbc.dll+0x11cb]
j  sun.jdbc.odbc.JdbcOdbc.allocConnect(J[B)J+0
j  sun.jdbc.odbc.JdbcOdbc.SQLAllocConnect(J)J+30
j  sun.jdbc.odbc.JdbcOdbcDriver.allocConnection(J)J+6
j  sun.jdbc.odbc.JdbcOdbcConnection.initialize(Ljava/lang/String;Ljava/util/Properties;I)V+37
j  sun.jdbc.odbc.JdbcOdbcDriver.connect(Ljava/lang/String;Ljava/util/Properties;)Ljava/sql/Connection;+129
j  java.sql.DriverManager.getConnection(Ljava/lang/String;Ljava/util/Properties;Ljava/lang/ClassLoader;)Ljava/sql/Connection;+210
j  java.sql.DriverManager.getConnection(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/sql/Connection;+41
j  Tables.Documents.getConnectionWS()Ljava/sql/Connection;+14
J  Tables.Documents.findAllOper(Ljava/lang/String;)[LinfoBeans/DocumentsInfoBean;
J  org.apache.jsp.addDoc_jsp._jspService(Ljavax/servlet/http/HttpServletRequest;Ljavax/servlet/http/HttpServletResponse;)V
j  org.apache.jasper.runtime.HttpJspBase.service(Ljavax/servlet/http/HttpServletRequest;Ljavax/servlet/http/HttpServletResponse;)V+3
j  javax.servlet.http.HttpServlet.service(Ljavax/servlet/ServletRequest;Ljavax/servlet/ServletResponse;)V+30
j  org.apache.jasper.servlet.JspServletWrapper.service(Ljavax/servlet/http/HttpServletRequest;Ljavax/servlet/http/HttpServletResponse;Z)V+395
j  org.apache.jasper.servlet.JspServlet.serviceJspFile(Ljavax/servlet/http/HttpServletRequest;Ljavax/servlet/http/HttpServletResponse;Ljava/lang/String;Ljava/lang/Throwable;Z)V+134
j  org.apache.jasper.servlet.JspServlet.service(Ljavax/servlet/http/HttpServletRequest;Ljavax/servlet/http/HttpServletResponse;)V+436
j  javax.servlet.http.HttpServlet.service(Ljavax/servlet/ServletRequest;Ljavax/servlet/ServletResponse;)V+30
J  org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Ljavax/servlet/ServletRequest;Ljavax/servlet/ServletResponse;)V
J  org.apache.catalina.core.ApplicationFilterChain.doFilter(Ljavax/servlet/ServletRequest;Ljavax/servlet/ServletResponse;)V
J  org.apache.catalina.core.StandardWrapperValve.invoke(Lorg/apache/catalina/connector/Request;Lorg/apache/catalina/connector/Response;)V
J  org.apache.catalina.core.StandardContextValve.invoke(Lorg/apache/catalina/connector/Request;Lorg/apache/catalina/connector/Response;)V
J  org.apache.catalina.core.StandardHostValve.invoke(Lorg/apache/catalina/connector/Request;Lorg/apache/catalina/connector/Response;)V
J  org.apache.catalina.valves.ErrorReportValve.invoke(Lorg/apache/catalina/connector/Request;Lorg/apache/catalina/connector/Response;)V
J  org.apache.catalina.core.StandardEngineValve.invoke(Lorg/apache/catalina/connector/Request;Lorg/apache/catalina/connector/Response;)V
J  org.apache.catalina.connector.CoyoteAdapter.service(Lorg/apache/coyote/Request;Lorg/apache/coyote/Response;)V
J  org.apache.coyote.http11.Http11Processor.process(Ljava/net/Socket;)V
j  org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Ljava/net/Socket;)Z+82
j  org.apache.tomcat.util.net.JIoEndpoint$Worker.run()V+41
j  java.lang.Thread.run()V+11
v  ~StubRoutines::call_stub

Java frames: (J=compiled Java code, j=interpreted, Vv=VM code)
j  sun.jdbc.odbc.JdbcOdbc.allocConnect(J[B)J+0
j  sun.jdbc.odbc.JdbcOdbc.SQLAllocConnect(J)J+30
j  sun.jdbc.odbc.JdbcOdbcDriver.allocConnection(J)J+6
j  sun.jdbc.odbc.JdbcOdbcConnection.initialize(Ljava/lang/String;Ljava/util/Properties;I)V+37
j  sun.jdbc.odbc.JdbcOdbcDriver.connect(Ljava/lang/String;Ljava/util/Properties;)Ljava/sql/Connection;+129
j  java.sql.DriverManager.getConnection(Ljava/lang/String;Ljava/util/Properties;Ljava/lang/ClassLoader;)Ljava/sql/Connection;+210
j  java.sql.DriverManager.getConnection(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/sql/Connection;+41
j  Tables.Documents.getConnectionWS()Ljava/sql/Connection;+14
J  Tables.Documents.findAllOper(Ljava/lang/String;)[LinfoBeans/DocumentsInfoBean;

Как можно это исправить?

спустя 3 дня [обр] GRAy(14/259)[досье]
Что за приложение работает на Tomcat`е и как оно обращается с коннекшанами? Закрывает ли? Корректно ли обрабатывает исключения?
Вполне возможно у DB2 надо не просто реорганизовать БД, но также подкрутить какие-нибудь heap`ы (точно не помню, надо лезть в документацию). Опять же, приложение работающее на Tomcat как оно задействует БД? Длинные транзакции, большие селекты и т.п. - всё это может оказывать влияние.
спустя 20 часов [обр] 30-ый(59/584)[досье]
Ну такого по-любому быть не должно, даже если я коннекшены принципиально не закрываю, а транзакции использую сикось накось и задом наперед. Что говорит саппорт DB2 по этому поводу?
спустя 6 минут [обр] lik[досье]
Приложение самодельного производства. Коннекшены всегда открываются, закрываются для каждого запроса (группы запросов) сам специально проверял. Исключения обрабатываются try finally, вроде нормально всё.
Приложение усиленно использует БД, буквально любая ссылка, любая кнопка это запрос в БД. Селекты не большие, транзакции большие есть при записи блоб объектов (файлов 30кб-1.5Мб по одному). Значит советуете настройкам БД больше внимания уделить.
спустя 20 минут [обр] GRAy(14/259)[досье]
30-ый[досье] В принципе да. Только если бы это возникало при правильном обращении с коннекшанами и транзакциями - было бы отловлено и исправлено давным давно ;) 140 пользователей - это не так уж и много.
lik[досье] Раз так - разумеется. Очевидно, что причина где-то "унутре" DB2. Попробуйте также поискать на сайте IBM и infocentr`е информацию о подобном поведении (ключевые слова EXCEPTION_ACCESS_VIOLATION и DB2). Скорее всего придётся накатывать на DB2 какой-нибудь патч. Работаете с продуктами IBM - привыкайте ;)))
Powered by POEM™ Engine Copyright © 2002-2005