반응형
"ajp-nio-0.0.0.0-8009-exec-524" #12060 daemon prio=5 os_prio=0 tid=0x00007fc61c166000 nid=0x7a49 waiting on condition [0x00007fc5e3704000]
java.lang.Thread.State: WAITING (parking)
at sun.misc.Unsafe.park(Native Method)
- parking to wait for <0x00000000c1b15ca0> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2039)
at org.apache.tomcat.dbcp.pool2.impl.LinkedBlockingDeque.takeFirst(LinkedBlockingDeque.java:1285)
at org.apache.tomcat.dbcp.pool2.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:313)
at org.apache.tomcat.dbcp.pool2.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:233)
at org.apache.tomcat.dbcp.dbcp2.PoolingDataSource.getConnection(PoolingDataSource.java:141)
at org.apache.tomcat.dbcp.dbcp2.BasicDataSource.getConnection(BasicDataSource.java:710)
at org.springframework.jdbc.datasource.DataSourceTransactionManager.doBegin(DataSourceTransactionManager.java:246)
at org.springframework.transaction.support.AbstractPlatformTransactionManager.getTransaction(AbstractPlatformTransactionManager.java:377)
at org.springframework.transaction.interceptor.TransactionAspectSupport.createTransactionIfNecessary(TransactionAspectSupport.java:461)
at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:277)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:96)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
at org.springframework.aop.aspectj.AspectJAfterThrowingAdvice.invoke(AspectJAfterThrowingAdvice.java:62)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:92)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:673)
at kipo.cmmn.menu.service.impl.MenuServiceImpl$$EnhancerBySpringCGLIB$$c2300b65.selectMenuInfo(<generated>)
at kipo.cmmn.menu.service.impl.MenuServiceImpl$$FastClassBySpringCGLIB$$207d9cfe.invoke(<generated>)
at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204)
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:738)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157)
at org.springframework.aop.support.DelegatingIntroductionInterceptor.doProceed(DelegatingIntroductionInterceptor.java:133)
at org.springframework.aop.support.DelegatingIntroductionInterceptor.invoke(DelegatingIntroductionInterceptor.java:121)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:673)
at kipo.cmmn.menu.service.impl.MenuServiceImpl$$EnhancerBySpringCGLIB$$56b3ef82.selectMenuInfo(<generated>)
at kipo.cmmn.utl.MenuUtil.getMenuInfo(MenuUtil.java:72)
at sun.reflect.GeneratedMethodAccessor229.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.apache.el.parser.AstFunction.getValue(AstFunction.java:186)
at org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:189)
at org.apache.jasper.el.JspValueExpression.getValue(JspValueExpression.java:129)
at org.apache.jsp.WEB_002dINF.jsp.kipo.include.cmmn_jsp._jspx_meth_c_005fset_005f0(cmmn_jsp.java:388)
at org.apache.jsp.WEB_002dINF.jsp.kipo.include.cmmn_jsp._jspService(cmmn_jsp.java:199)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:623)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:466)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:379)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:327)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:623)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:200)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:144)
at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:641)
at org.apache.catalina.core.ApplicationDispatcher.doInclude(ApplicationDispatcher.java:517)
at org.apache.catalina.core.ApplicationDispatcher.include(ApplicationDispatcher.java:460)
at org.apache.taglibs.standard.tag.common.core.ImportSupport.acquireString(ImportSupport.java:296)
at org.apache.taglibs.standard.tag.common.core.ImportSupport.doEndTag(ImportSupport.java:161)
at org.apache.jsp.code404_jsp._jspx_meth_c_005fimport_005f0(code404_jsp.java:447)
at org.apache.jsp.code404_jsp._jspService(code404_jsp.java:236)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:623)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:466)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:379)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:327)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:623)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:200)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:144)
at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:641)
at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:417)
at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:347)
at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:284)
at org.apache.catalina.core.StandardHostValve.custom(StandardHostValve.java:377)
at org.apache.catalina.core.StandardHostValve.status(StandardHostValve.java:237)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:166)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93)
at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:670)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)
at org.apache.catalina.ha.session.JvmRouteBinderValve.invoke(JvmRouteBinderValve.java:165)
at org.apache.catalina.ha.tcp.ReplicationValve.invoke(ReplicationValve.java:317)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:346)
at org.apache.coyote.ajp.AjpProcessor.service(AjpProcessor.java:424)
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63)
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:928)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1786)
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52)
at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191)
at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63)
at java.lang.Thread.run(Thread.java:750)
Locked ownable synchronizers:
- <0x00000000fbb053f8> (a java.util.concurrent.locks.ReentrantLock$NonfairSync)
- <0x00000000fbd87b48> (a org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker)
위의 스레드 덤프는 ajp-nio-0.0.0.0-8009-exec-524 스레드가 WAITING 상태에 있으며, java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject의 await 메소드에서 대기 중임을 나타냅니다. 이는 대기 상태로 진입한 이유와 해결 방법에 대한 분석을 필요로 합니다.
주요 정보 및 분석
- 스레드 상태:
- java.lang.Thread.State: WAITING (parking): 이 스레드는 LockSupport.park 메소드를 통해 대기 상태에 있습니다. 이는 다른 스레드에서 신호를 받을 때까지 대기 중임을 의미합니다.
- 대기 원인:
- parking to wait for <0x00000000c1b15ca0> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject): 이 스레드는 특정 조건 객체에서 신호를 기다리고 있습니다.
- 대기 중인 코드의 흐름은 데이터베이스 커넥션 풀에서 커넥션을 빌려오기 위해 대기 중입니다. 이는 GenericObjectPool.borrowObject 메소드에서 발생합니다.
- 문제 원인:
- 데이터베이스 커넥션 풀 부족: 데이터베이스 커넥션 풀의 모든 커넥션이 사용 중일 때 발생할 수 있습니다. 이는 커넥션 풀이 충분히 크지 않거나, 커넥션이 적절히 반환되지 않아서 발생할 수 있습니다.
- 트랜잭션 처리 지연: 트랜잭션이 정상적으로 종료되지 않거나, 데이터베이스에서의 긴 쿼리 처리 시간 등으로 인해 커넥션이 반환되지 않을 수 있습니다.
해결 방법
- 데이터베이스 커넥션 풀 크기 조정:
- server.xml 또는 데이터베이스 커넥션 풀 설정 파일에서 커넥션 풀 크기를 증가시켜야 할 수 있습니다.
- 예를 들어, maxTotal, maxIdle 등의 값을 조정하여 커넥션 풀 크기를 늘립니다.
- 쿼리 및 트랜잭션 최적화:
- 데이터베이스 쿼리 시간을 분석하고, 오래 걸리는 쿼리를 최적화합니다.
- 트랜잭션 관리 설정을 검토하여 트랜잭션이 적시에 종료되도록 합니다.
- 스레드 덤프 분석:
- 추가로 다른 스레드 덤프를 분석하여 유사한 상태의 스레드가 있는지 확인합니다. 이를 통해 특정 부분에서 병목 현상이 발생하는지 파악할 수 있습니다.
- 로그 분석 및 모니터링:
- 서버 로그를 추가로 분석하여 다른 관련 에러 메시지나 경고 메시지가 있는지 확인합니다.
- 모니터링 도구를 사용하여 실시간으로 서버 상태를 모니터링하고, 문제 발생 시 신속히 대응할 수 있도록 합니다.
반응형
'공부 > 서버운영관리' 카테고리의 다른 글
[tomcat] Session Cluster Configuration (0) | 2024.07.02 |
---|---|
[서버운영관리] IT 인프라를 구성하는 요소 (0) | 2024.04.17 |
[서버운영관리] 인프라 엔지니어의 업무 (0) | 2024.04.17 |
[서버운영관리] xshell Socket error Event : 32 Error: 10053 (0) | 2022.09.20 |
[xen]xenserver pv storage host adapter ...... (0) | 2022.07.20 |
댓글