On 13.07.2009 10:12, Raphael Neve wrote:
> Hello all, 
> 
> I have a problem with a web application using Tomcat 5.5.27 under Fedora
> Linux and database Firebird 2.1.
> 
> The application runs fine for a day or so, then I begin getting blocked
> threads. Eventually, the heap space runs out and the application grinds to a
> halt. 
> 
> I realise this may be very difficult to diagnose, but if someone could give
> me some pointers as to how to go about getting to the bottom of this I would
> be very grateful. 
> 
> At the moment I have 5 blocked threads which are : 
> 
> "TP-Processor16" daemon prio=1 tid=0x09d08310 nid=0x6fc7 waiting for monitor
> entry [0x61b25000..0x61b25fb0]
>         at
> org.firebirdsql.gds.impl.wire.AbstractJavaGDSImpl.iscDsqlAllocateStatement(AbstractJavaGDSImpl.java:1047)
>         - waiting to lock <0x73a71dd0> (a
> org.firebirdsql.gds.impl.wire.isc_db_handle_impl)
>         at
> org.firebirdsql.gds.impl.GDSHelper.allocateStatement(GDSHelper.java:119)
>         at
> org.firebirdsql.jdbc.AbstractStatement.prepareFixedStatement(AbstractStatement.java:1112)
>         at
> org.firebirdsql.jdbc.AbstractPreparedStatement.prepareFixedStatement(AbstractPreparedStatement.java:1176)
>         at
> org.firebirdsql.jdbc.AbstractPreparedStatement.<init>(AbstractPreparedStatement.java:124)
>         at
> org.firebirdsql.jdbc.FBPreparedStatement.<init>(FBPreparedStatement.java:41)
>         at sun.reflect.GeneratedConstructorAccessor13.newInstance(Unknown
> Source)
>         at
> sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
>         at java.lang.reflect.Constructor.newInstance(Constructor.java:494)
>         at
> org.firebirdsql.jdbc.FBStatementFactory.createPreparedStatement(FBStatementFactory.java:90)
>         at
> org.firebirdsql.jdbc.AbstractConnection.prepareStatement(AbstractConnection.java:869)
>         - locked <0x73a71c40> (a org.firebirdsql.jdbc.FBConnection)
>         at
> org.firebirdsql.jdbc.AbstractConnection.prepareStatement(AbstractConnection.java:824)
>         - locked <0x73a71c40> (a org.firebirdsql.jdbc.FBConnection)
>         at
> org.firebirdsql.jdbc.AbstractConnection.prepareStatement(AbstractConnection.java:817)
>         - locked <0x73a71c40> (a org.firebirdsql.jdbc.FBConnection)
>         at
> org.firebirdsql.jdbc.AbstractConnection.prepareStatement(AbstractConnection.java:293)
>         - locked <0x73a71c40> (a org.firebirdsql.jdbc.FBConnection)
>         at fr.microtec.db.Query.prepare(Query.java:119)
>         at
> fr.microtec.artemis.controller.managers.CommandesManager.droitsAcces(CommandesManager.java:3837)
>         at
> fr.microtec.artemis.controller.servlets.secure.ConsultCmd.detailCommande(ConsultCmd.java:188)
>         at
> fr.microtec.artemis.controller.servlets.secure.ConsultCmd.doProcessRequest2(ConsultCmd.java:78)
>         at
> fr.microtec.artemis.controller.servlets.secure.FilterServlet.doProcessRequest(FilterServlet.java:92)
>         at
> fr.microtec.artemis.controller.servlets.secure.SecureServlet.verifSessionOuverte(SecureServlet.java:78)
>         at
> fr.microtec.artemis.controller.servlets.secure.SecureServlet.processRequest(SecureServlet.java:46)
>         at
> fr.microtec.artemis.controller.servlets.secure.SecureServlet.doGet(SecureServlet.java:118)
>         at javax.servlet.http.HttpServlet.service(HttpServlet.java:627)
>         at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
>         at
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
>         at
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
>         at
> org.extremecomponents.table.filter.AbstractExportFilter.doFilter(AbstractExportFilter.java:49)
>         at
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
>         at
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
>         at
> org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
>         at
> org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:172)
>         at
> org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
>         at
> org.jstripe.tomcat.probe.Tomcat55AgentValve.invoke(Tomcat55AgentValve.java:20)
>         at
> org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
>         at
> org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
>         at
> org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:174)
>         at
> org.apache.jk.server.JkCoyoteHandler.invoke(JkCoyoteHandler.java:200)
>         at
> org.apache.jk.common.HandlerRequest.invoke(HandlerRequest.java:283)
>         at org.apache.jk.common.ChannelSocket.invoke(ChannelSocket.java:773)
>         at
> org.apache.jk.common.ChannelSocket.processConnection(ChannelSocket.java:703)
>         at
> org.apache.jk.common.ChannelSocket$SocketConnection.runIt(ChannelSocket.java:895)
>         at
> org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689)
>         at java.lang.Thread.run(Thread.java:595)
> 
> "TP-Processor12" daemon prio=1 tid=0x0a02ab80 nid=0x6fb9 waiting for monitor
> entry [0x623fc000..0x623fcdb0]
>         at
> org.firebirdsql.jdbc.AbstractConnection.prepareStatement(AbstractConnection.java:293)
>         - waiting to lock <0x73a71c40> (a org.firebirdsql.jdbc.FBConnection)
>         at fr.microtec.db.Query.prepare(Query.java:119)
>         at
> fr.microtec.artemis.controller.managers.PrintshopsManager.isPICKActif(PrintshopsManager.java:61)
>         at
> fr.microtec.artemis.controller.managers.CommandesManager.internalGetListCmdEtam(CommandesManager.java:1657)
>         at
> fr.microtec.artemis.controller.managers.CommandesManager.getListCmd(CommandesManager.java:135)
>         at
> fr.microtec.artemis.controller.servlets.secure.ConsultCmd.listeCommandes(ConsultCmd.java:1088)
>         at
> fr.microtec.artemis.controller.servlets.secure.ConsultCmd.doProcessRequest2(ConsultCmd.java:76)
>         at
> fr.microtec.artemis.controller.servlets.secure.FilterServlet.doProcessRequest(FilterServlet.java:92)
>         at
> fr.microtec.artemis.controller.servlets.secure.SecureServlet.verifSessionOuverte(SecureServlet.java:78)
>         at
> fr.microtec.artemis.controller.servlets.secure.SecureServlet.processRequest(SecureServlet.java:46)
>         at
> fr.microtec.artemis.controller.servlets.secure.SecureServlet.doGet(SecureServlet.java:118)
>         at javax.servlet.http.HttpServlet.service(HttpServlet.java:627)
>         at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
>         at
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
>         at
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
>         at
> org.extremecomponents.table.filter.AbstractExportFilter.doFilter(AbstractExportFilter.java:49)
>         at
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
>         at
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
>         at
> org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
>         at
> org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:172)
>         at
> org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
>         at
> org.jstripe.tomcat.probe.Tomcat55AgentValve.invoke(Tomcat55AgentValve.java:20)
>         at
> org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
>         at
> org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
>         at
> org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:174)
>         at
> org.apache.jk.server.JkCoyoteHandler.invoke(JkCoyoteHandler.java:200)
>         at
> org.apache.jk.common.HandlerRequest.invoke(HandlerRequest.java:283)
>         at org.apache.jk.common.ChannelSocket.invoke(ChannelSocket.java:773)
>         at
> org.apache.jk.common.ChannelSocket.processConnection(ChannelSocket.java:703)
>         at
> org.apache.jk.common.ChannelSocket$SocketConnection.runIt(ChannelSocket.java:895)
>         at
> org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689)
>         at java.lang.Thread.run(Thread.java:595)
> 
> 
> "TP-Processor5" daemon prio=1 tid=0x0a32ceb8 nid=0x6faf waiting for monitor
> entry [0x626c2000..0x626c3130]
>         at
> org.firebirdsql.jdbc.AbstractConnection.prepareStatement(AbstractConnection.java:293)
>         - waiting to lock <0x73a71c40> (a org.firebirdsql.jdbc.FBConnection)
>         at fr.microtec.db.Query.prepare(Query.java:119)
>         at
> fr.microtec.artemis.controller.managers.PrintshopsManager.isPICKActif(PrintshopsManager.java:61)
>         at
> fr.microtec.artemis.controller.managers.CommandesManager.internalGetListCmdEtam(CommandesManager.java:1657)
>         at
> fr.microtec.artemis.controller.managers.CommandesManager.getListCmd(CommandesManager.java:135)
>         at
> fr.microtec.artemis.controller.servlets.secure.ConsultCmd.listeCommandes(ConsultCmd.java:1088)
>         at
> fr.microtec.artemis.controller.servlets.secure.ConsultCmd.doProcessRequest2(ConsultCmd.java:76)
>         at
> fr.microtec.artemis.controller.servlets.secure.FilterServlet.doProcessRequest(FilterServlet.java:92)
>         at
> fr.microtec.artemis.controller.servlets.secure.SecureServlet.verifSessionOuverte(SecureServlet.java:78)
>         at
> fr.microtec.artemis.controller.servlets.secure.SecureServlet.processRequest(SecureServlet.java:46)
>         at
> fr.microtec.artemis.controller.servlets.secure.SecureServlet.doGet(SecureServlet.java:118)
>         at javax.servlet.http.HttpServlet.service(HttpServlet.java:627)
>         at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
>         at
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
>         at
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
>         at
> org.extremecomponents.table.filter.AbstractExportFilter.doFilter(AbstractExportFilter.java:49)
>         at
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
>         at
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
>         at
> org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
>         at
> org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:172)
>         at
> org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
>         at
> org.jstripe.tomcat.probe.Tomcat55AgentValve.invoke(Tomcat55AgentValve.java:20)
>         at
> org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
>         at
> org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
>         at
> org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:174)
>         at
> org.apache.jk.server.JkCoyoteHandler.invoke(JkCoyoteHandler.java:200)
>         at
> org.apache.jk.common.HandlerRequest.invoke(HandlerRequest.java:283)
>         at org.apache.jk.common.ChannelSocket.invoke(ChannelSocket.java:773)
>         at
> org.apache.jk.common.ChannelSocket.processConnection(ChannelSocket.java:703)
>         at
> org.apache.jk.common.ChannelSocket$SocketConnection.runIt(ChannelSocket.java:895)
>         at
> org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689)
>         at java.lang.Thread.run(Thread.java:595)
> 
> "TP-Processor2" daemon prio=1 tid=0x6a158aa0 nid=0x6f77 waiting for monitor
> entry [0x6947b000..0x6947bdb0]
>         at
> org.firebirdsql.gds.impl.wire.AbstractJavaGDSImpl.iscGetSegment(AbstractJavaGDSImpl.java:1775)
>         - waiting to lock <0x73a71dd0> (a
> org.firebirdsql.gds.impl.wire.isc_db_handle_impl)
>         at
> org.firebirdsql.gds.impl.GDSHelper.getBlobSegment(GDSHelper.java:499)
>         at
> org.firebirdsql.jdbc.field.FBBlobField.getBytesInternal(FBBlobField.java:135)
>         - locked <0x73a71e28> (a org.firebirdsql.gds.impl.GDSHelper)
>         at
> org.firebirdsql.jdbc.field.FBBlobField.getBytes(FBBlobField.java:108)
>         at org.firebirdsql.jdbc.field.FBField.getObject(FBField.java:577)
>         at
> org.firebirdsql.jdbc.AbstractResultSet.getObject(AbstractResultSet.java:1007)
>         at fr.microtec.db.Field.getValue(Field.java:15)
>         at
> fr.microtec.artemis.model.data.etam.EtamCommandeCorps.loadFromDatabase(EtamCommandeCorps.java:122)
>         at
> fr.microtec.artemis.model.data.etam.EtamCommandeCorps.<init>(EtamCommandeCorps.java:71)
>         at
> fr.microtec.artemis.model.data.etam.EtamCommande.doLoadCommandeFromDatabase(EtamCommande.java:146)
>         at
> fr.microtec.artemis.model.data.etam.EtamCommande.<init>(EtamCommande.java:79)
>         at
> fr.microtec.artemis.controller.managers.CommandesManager.getCommandeInstance(CommandesManager.java:2219)
>         at
> fr.microtec.artemis.controller.servlets.secure.ConsultCmd.detailCommande(ConsultCmd.java:189)
>         at
> fr.microtec.artemis.controller.servlets.secure.ConsultCmd.doProcessRequest2(ConsultCmd.java:78)
>         at
> fr.microtec.artemis.controller.servlets.secure.FilterServlet.doProcessRequest(FilterServlet.java:92)
>         at
> fr.microtec.artemis.controller.servlets.secure.SecureServlet.verifSessionOuverte(SecureServlet.java:78)
>         at
> fr.microtec.artemis.controller.servlets.secure.SecureServlet.processRequest(SecureServlet.java:46)
>         at
> fr.microtec.artemis.controller.servlets.secure.SecureServlet.doGet(SecureServlet.java:118)
>         at javax.servlet.http.HttpServlet.service(HttpServlet.java:627)
>         at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
>         at
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
>         at
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
>         at
> org.extremecomponents.table.filter.AbstractExportFilter.doFilter(AbstractExportFilter.java:49)
>         at
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
>         at
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
>         at
> org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
>         at
> org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:172)
>         at
> org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
>         at
> org.jstripe.tomcat.probe.Tomcat55AgentValve.invoke(Tomcat55AgentValve.java:20)
>         at
> org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
>         at
> org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
>         at
> org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:174)
>         at
> org.apache.jk.server.JkCoyoteHandler.invoke(JkCoyoteHandler.java:200)
>         at
> org.apache.jk.common.HandlerRequest.invoke(HandlerRequest.java:283)
>         at org.apache.jk.common.ChannelSocket.invoke(ChannelSocket.java:773)
>         at
> org.apache.jk.common.ChannelSocket.processConnection(ChannelSocket.java:703)
>         at
> org.apache.jk.common.ChannelSocket$SocketConnection.runIt(ChannelSocket.java:895)
>         at
> org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689)
>         at java.lang.Thread.run(Thread.java:595)
> 
> "TP-Processor1" daemon prio=1 tid=0x6a156530 nid=0x6f76 waiting for monitor
> entry [0x696fc000..0x696fce30]
>         at
> org.firebirdsql.jdbc.AbstractConnection.prepareStatement(AbstractConnection.java:293)
>         - waiting to lock <0x73a71c40> (a org.firebirdsql.jdbc.FBConnection)
>         at fr.microtec.db.Query.prepare(Query.java:119)
>         at fr.microtec.db.Query.exec(Query.java:178)
>         at fr.microtec.artemis.model.data.User.login(User.java:140)
>         at
> fr.microtec.artemis.controller.managers.UsersManager.tryUserLogin(UsersManager.java:38)
>         at
> fr.microtec.artemis.controller.servlets.Login.processRequest(Login.java:55)
>         at
> fr.microtec.artemis.controller.servlets.Login.doPost(Login.java:102)
>         at javax.servlet.http.HttpServlet.service(HttpServlet.java:647)
>         at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
>         at
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
>         at
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
>         at
> org.extremecomponents.table.filter.AbstractExportFilter.doFilter(AbstractExportFilter.java:49)
>         at
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
>         at
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
>         at
> org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
>         at
> org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:172)
>         at
> org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
>         at
> org.jstripe.tomcat.probe.Tomcat55AgentValve.invoke(Tomcat55AgentValve.java:20)
>         at
> org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
>         at
> org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
>         at
> org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:174)
>         at
> org.apache.jk.server.JkCoyoteHandler.invoke(JkCoyoteHandler.java:200)
>         at
> org.apache.jk.common.HandlerRequest.invoke(HandlerRequest.java:283)
>         at org.apache.jk.common.ChannelSocket.invoke(ChannelSocket.java:773)
>         at
> org.apache.jk.common.ChannelSocket.processConnection(ChannelSocket.java:703)
>         at
> org.apache.jk.common.ChannelSocket$SocketConnection.runIt(ChannelSocket.java:895)
>         at
> org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689)
>         at java.lang.Thread.run(Thread.java:595)
> 
> 
> 
> For your information, the code at
> "fr.microtec.db.Query.prepare(Query.java:119)" is the following : 
> 
>       sqlStatement = connection.sqlConnection.prepareStatement(realSQLText);
> 
> Which is a call to the JDBC "prepareStatement" method. 
> 
> What can be going wrong ? Each user has his own connection to the database,
> how can they be blocking each other ?
> 
> Thanks for any help, suggestions, etc !
> 
> Raphael Neve

TP-Processor16 owns lock at 0x73a71c40 and thus blocks TP12, TP5 and TP1.

TP16 and TP2 both wait for lock 0x73a71dd0. The thread holding this lock
is not in your dump.

Since the lock is of type
org.firebirdsql.gds.impl.wire.isc_db_handle_impl, it seems either yet
another thread uses that lock (in which case it could be either simple
lock contention, or if that thread wait e.g. on 0x73a71c40 it would be a
deadlock), or the thread that originally hold the lock didn't free it
due to a code bug. Check your thread dump for 0x73a71c40.

Also check the firebird bug database and version of your firebird JDBC
driver.

Regards,

Rainer

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
For additional commands, e-mail: users-h...@tomcat.apache.org

Reply via email to