본문 바로가기

장애&오류&예외

[Library-Bug] JAXB(apache-cxf) Jboss서비스 지연현상

운영중인 플랫폼 중, 원인 불명의 지연현상을 겪는 경우가 간혹 있을 것이다.

해당 이슈는 원인 확인하기 어려운 케이스중 하나이며, core/heap/thread dump를 통해 분석결과 최종적으로 확인이 되었던 케이스이다.

현상은 간혈적인 WAS인스턴스의 지연현상으로 부터 발생하며, 초기 DB Connection이 이루어지고 Trantransaction과정에서 호출이 끝났음에도 Connection이 끊기지 않고 Session이 지속적으로 유지되면서 발생된다.

이로인해 타플랫폼에도 영향이가게되어 연쇄적으로 지연현상이 발생되는 케이스가 되었으며, 연동 서비스 플랫폼팀과 협의하에 소스상으로 cxf설정상 SessionTimeOut시간을 30초로 정의하게되었다.

<!-- import Apache CXF WebService configuration -->
<!-- if cxf version is over 3 require remove -->
<import resource="classpath:META-INF/cxf/cxf-servlet.xml"/>
<import resource="classpath:META-INF/cxf/cxf.xml"/>
<import resource="classpath:META-INF/cxf/cxf-extension-soap.xml"/>

<http-conf:conduit name="*.http-conduit">
    <http-conf:client Connection="Keep-Alive" MaxRetransmits="0" ConnectionTimeout="100000" ReceiveTimeout="30000" AllowChunking="false"/>
</http-conf:conduit>

 

결과적으로 연쇄적인 지연현상 발생은 없어지게되었으나, 빈도수 적게 해당 플랫폼의 지연현상은 아직까지 확인되고있다. 

해당설정은 임시방편에 불과하나 큰 플랫폼일 경우 영향도가 크기때문에 이를 조정하기에는 다소 난관이 되기에 잘고려해야하는 부분이다. 

분석결과(dump) apache cxf webservice 라이브로부터 thread를 통해 class 재귀호출이 무한으로 반복되는 현상이 확인되었고, jboss/jdk 그리고 문제의 라이브러리와의 연관성을 확인하게되어 jdk자체버그라는 결론과 특정 was에서 사용시에 별도의 설정이 필요한 케이스도 같이 확인하게되었다.

영향도 확인을 위해 보다 쉽게 WAS LOG을 StackTrace 레벨로 조정하여 분석도 가능하였으나, 저자가 담당하는 플랫폼에서는 그러한 기회가 주어지지 못했었다.

폐쇄망 환경의 플랫폼이기에 상세한 정보는 공개하기 어려우나 공개가능한 범위내에서 내용을 정리하여 기재하며 글을 마치겠다.

 

#- 이슈발생 대상 플랫폼 스펙정보

종류 영역 버전
WAS jboss jboss-as-7.1.1.Final
LIBRARY jaxb jaxb-api-2.2.6
JAVA jdk jdk1.7.0_79

 

#- References

[jboss-docs]jboss_modules_webservice_applications

[javaee]jaxbcontext_performance_problem_case

[java-bug]com.sun.xml.bind.v2.runtime.reflect.opt.AccessorInjector

Session_And_Transaction