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