2010-04-15 3 views
1

우리는 연결 풀링에 Apache DBCP를 사용하는 Spring 응용 프로그램을 가지고 있습니다. 우리 앱은 아무런 문제없이 거의 1 년 동안 생산되었습니다. 그러나 지난 몇 주 동안 응용 프로그램은 여러 번 정지되었습니다. (얼어서는 요청이 처리되지 않는다는 의미입니다.) 앱을 호스팅하는 Glassfish 도메인을 다시 시작하면 일시적으로 문제가 해결됩니다.Glassfish와 Spring을 사용하는 Apache DBCP를 사용하여 연결 풀이 중지됨

이 응용 프로그램의 메모리 (힙 + 비 힙) 및 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) 
|#] 

답변

1

다른 사람이이 질문에 걸리면 대답은 here입니다.

1

불행히도 DBCP는 교착 상태로 악명이 높습니다. 최근에 재 작성 노력이있었습니다. 또는 BoneCP와 같은 (더 빠른) 다른 풀을 시도 할 수도 있습니다 : http://jolbox.com.

관련 문제