1

接続プールにApacheDBCPを使用するSpringアプリケーションがあります。私たちのアプリは、ほぼ1年間、問題なく運用されています。ただし、過去数週間の間に、アプリケーションは何度もフリーズしました。(フリーズとは、リクエストが処理されないことを意味します。)この問題は、アプリをホストしているGlassfishドメインを再起動することで一時的に修正されます。

このアプリケーションのメモリ(ヒープ+非ヒープ)とCPU使用率を監視しています。ここでは異常なことは何もありません。ただし、ドメインを再起動すると、ログファイルにこの投稿の下部にあるような例外メッセージが表示されることに気付きました。

このNPEのそれぞれがスタックの最上位にあるborrowObjectメソッドを報告するため、DBCPを使用していることを指摘します。これらはそれぞれ、アプリケーションのシャットダウン中に同じミリ秒以内に発生します。

過去にこれらがいくつか発生していることに気づきましたが(このようなNPEによるシャットダウン)、アプリケーションがフリーズすると、常に5つ発生します。これは偶然ではないと思いますが、アプリケーションへのリクエストを処理するHTTPSSLWorkerThreadsの数と同じです。

何がこれを引き起こしているのか、そしてそれを修正する方法を誰かが知っているなら、助けていただければ幸いです。

[#|2009-09-27T12:17:12.209-0400|SEVERE|sun-appserver9.1|javax.enterprise.system.container.web|_ThreadID=20;_ThreadName=httpSSLWorkerThread-443-4;_RequestID=25b115cb-de08-4ad4-bfdb-f76eb13b4bbe;|StandardWrapperValve[spring-dispatcher]: PWC1406: Servlet.service() for servlet spring-dispatcher threw exception
java.lang.NullPointerException
  at org.apache.commons.pool.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:788)
  at org.apache.commons.dbcp.PoolingDataSource.getConnection(PoolingDataSource.java:95)
  at org.apache.commons.dbcp.BasicDataSource.getConnection(BasicDataSource.java:540)
  at org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:113)
  at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:79)
  at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:552)
  at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:616)
  at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:645)
  at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:653)
  at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:685)
  at org.springframework.jdbc.core.simple.SimpleJdbcTemplate.query(SimpleJdbcTemplate.java:187)
  at stimpl.dao.ProjectDAO.getSearchResults(ProjectDAO.java:153)
  at stimpl.service.StimPlService.getSearchResults(StimPlService.java:69)
  at stimpl.mvc.search.ShowResultsController.handleRequestInternal(ShowResultsController.java:44)
  at org.springframework.web.servlet.mvc.AbstractController.handleRequest(AbstractController.java:153)
  at org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle(SimpleControllerHandlerAdapter.java:48)
  at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:874)
  at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:808)
  at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:476)
  at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:431)
  at javax.servlet.http.HttpServlet.service(HttpServlet.java:718)
  at javax.servlet.http.HttpServlet.service(HttpServlet.java:831)
  at org.apache.catalina.core.ApplicationFilterChain.servletService(ApplicationFilterChain.java:411)
  at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:317)
  at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:198)
  at org.acegisecurity.securechannel.ChannelProcessingFilter.doFilter(ChannelProcessingFilter.java:138)
  at org.acegisecurity.util.FilterToBeanProxy.doFilter(FilterToBeanProxy.java:98)
  at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:230)
  at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:198)
  at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:265)
  at org.acegisecurity.intercept.web.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:107)
  at org.acegisecurity.intercept.web.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:72)
  at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275)
  at org.acegisecurity.ui.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:124)
  at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275)
  at org.acegisecurity.providers.anonymous.AnonymousProcessingFilter.doFilter(AnonymousProcessingFilter.java:125)
  at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275)
  at org.acegisecurity.wrapper.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:81)
  at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275)
  at org.acegisecurity.ui.AbstractProcessingFilter.doFilter(AbstractProcessingFilter.java:271)
  at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275)
  at org.acegisecurity.ui.logout.LogoutFilter.doFilter(LogoutFilter.java:110)
  at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275)
  at org.acegisecurity.context.HttpSessionContextIntegrationFilter.doFilter(HttpSessionContextIntegrationFilter.java:249)
  at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275)
  at org.acegisecurity.util.FilterChainProxy.doFilter(FilterChainProxy.java:149)
  at org.acegisecurity.util.FilterToBeanProxy.doFilter(FilterToBeanProxy.java:98)
  at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:230)
  at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:198)
  at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:288)
  at org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:271)
  at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:202)
  at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:632)
  at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:577)
  at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:94)
  at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:206)
  at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:632)
  at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:577)
  at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:571)
  at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:1080)
  at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:150)
  at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:632)
  at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:577)
  at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:571)
  at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:1080)
  at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:270)
  at com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.invokeAdapter(DefaultProcessorTask.java:637)
  at com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.doProcess(DefaultProcessorTask.java:568)
  at com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.process(DefaultProcessorTask.java:813)
  at com.sun.enterprise.web.connector.grizzly.DefaultReadTask.executeProcessorTask(DefaultReadTask.java:339)
  at com.sun.enterprise.web.connector.grizzly.ssl.SSLReadTask.process(SSLReadTask.java:440)
  at com.sun.enterprise.web.connector.grizzly.ssl.SSLReadTask.doTask(SSLReadTask.java:228)
  at com.sun.enterprise.web.connector.grizzly.TaskBase.run(TaskBase.java:265)
  at com.sun.enterprise.web.connector.grizzly.ssl.SSLWorkerThread.run(SSLWorkerThread.java:106)
|#]
4

2 に答える 2

1

残念ながら、DBCPはデッドロックで有名ですが、最近は書き換え作業が行われています。または、BoneCPなどの(より高速な)別のプールを試すこともできます:http://jolbox.com

于 2010-06-23T10:19:47.017 に答える
1

他の誰かがこの質問に出くわした場合、答えはここにあります。

于 2010-07-07T20:02:22.593 に答える