요즘 iBATIS를 사용하는 프로젝트가 많이 있다.
예전 회사에서도 이런 경우가 발생한 것으로 생각되는데,
iBATIS를 사용하면 WAS의 CPU 사용량이 어느 정도 이상 증가하지 않고,
TPS도 증가하지 않는 현상이 발생하는 경우가 간혹 있었다.

최근에도 이런 문제를 확인했는데,
그 이유는 iBATIS의 com.ibatis.common.beans.ClassInfo 클래스에 있었다.
뭐 내가 잡은건 아니고 내 옆자리에 있는 박박사님께서 ^^;

만약 쿼리들이 느린 경우에는 이런 문제가 야기 되지 않겠지만,
쿼리들이 엄청 빠를 경우 WAS에 병목이 생긴다. 아래의 링크를 보자.
https://issues.apache.org/jira/browse/IBATIS-508?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12683961

이중으로 Lock을 잡은 것이 문제였으며,
우연찮게도, 미쿡 애들도 비슷한 시기에 문제를 확인한 것 같다.
http://www.kaigrabfelder.de/en/2009/05/01/concurrency_vs_synchronization.html

가장 좋은 해법은 ConcurrentHashMap 을 사용하는 것이다.

해당 버젼이 release (2.3.5)되면 성능을 위해서 update 하는 것이 좋을 듯 하다.


Posted by tuning-java
,