카테고리 없음

com.ibatis.common.util.Throttle.increment 호출 후 Object wait 상태

_주야 2021. 9. 14. 08:30


[현상]
WAS에서 DB connection 오류 발생 및 max thread 현상 발생 (WAS hang)

[오류내용]

"ajp--172.27.179.164-8109-2046" daemon prio=10 tid=0x00002aae9d23d000 nid=0x176d in Object.wait() [0x00002aae73f66000]
java.lang.Thread.State: WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
at java.lang.Object.wait(Object.java:503)
at com.ibatis.common.util.Throttle.increment(Throttle.java:70)
- locked <0x00000007956aa868> (a java.lang.Object)
at com.ibatis.common.util.Throttle.increment(Throttle.java:70)
- locked <0x00000007956aa868> (a java.lang.Object)
at com.ibatis.common.util.ThrottledPool.pop(ThrottledPool.java:57)
at com.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate.popSession(SqlMapExecutorDelegate.java:933)
at com.ibatis.sqlmap.engine.impl.SqlMapSessionImpl.<init>(SqlMapSessionImpl.java:51)
at com.ibatis.sqlmap.engine.impl.SqlMapClientImpl.openSession(SqlMapClientImpl.java:222)
at org.springframework.orm.ibatis.SqlMapClientTemplate.execute(SqlMapClientTemplate.java:169)
at org.springframework.orm.ibatis.SqlMapClientTemplate.queryForList(SqlMapClientTemplate.java:296)
at org.springframework.orm.ibatis.SqlMapClientTemplate.queryForList(SqlMapClientTemplate.java:290)


[분석방법]
1. 문제 당시 스레드 덤프와 스레드ID 별 CPU 사용량 확보
- 스레드 덤프 추출 방법 : jstack -l > thread_1.log
2. 스레드 덤프 분석
- 스레드 덤프 분석 방법 :


[참고자료]
이 포스팅을 보고 해결의 실마리를 찾았고 ibatis bug로 2.3.1 이상에서는 해당 메소드 제거되었다고 함 com.ibatis.common.util.Throttle.increment

http://m.egloos.zum.com/kwon37xi/v/2475305

[DEBUG] Spring + iBATIS 사용시 WAS가 Hang 이 걸려요!

근본적으로 이런 문제를 겪은 이유는 Spring 책을 제대로 안 읽었기 때문이 아닌가 싶다.웬만하면 관련 서적은 완독한 후에 프로젝트에 적용하는 것을 원칙으로 하는데, (변명하자면 워낙 책이 두

m.egloos.zum.com