2011-10-27 6 views
0

내 tomcat 서버의 이상한 동작을 관찰하고 있습니다. 바람둥이가 클라이언트에 대한 응답을 충분히 빠르게 작성하지 않는 것 같습니다. 내가보고있는 것은 다음과 같습니다.Tomcat 6 응답 작성

tomcat 서버에서 동시에 200 개의 요청을 실행하면 응용 프로그램 로그에 내 서블릿의 doGet()이 약 500ms 후에 요청을 처리하는 것으로 나타납니다. 그러나 클라이언트 측에서는 평균 응답 시간이 약 30 초입니다 (즉, 클라이언트가 30 초 후에 바람둥이의 응답을보기 시작합니다)!

내 서블릿의 프로세스 시간 끝과 클라이언트가 응답을받는 사이에 오래 지연되는 이유에 대해 누구나 알고 있습니까?

내 서버는 Rackspace VM에서 호스팅됩니다.

답변

0

범인을 찾았습니다. 호스트 서버가 단지 몇 가지 요청만으로도 비정상적으로 높은 CPU 사용량을 사용하고 있다는 것을 알았습니다. 그래서 JConsole을 Tomcat에 연결하고 모든 작업자 스레드가 높은 블로킹 횟수를 가지고 있다는 것을 알았고 끊임없이 블로킹 상태에 있습니다. JAXBContext 인스턴스화 중에 스택 추적을 보면 잠금이 발생했습니다. 또한, 요청 당 상대적으로 비용이 많이 드는 JAXBContext를 생성하는 애플리케이션.

요약하면이 문제는 스레드 당 JAXBContext 인스턴스화로 인해 발생했습니다. 솔루션은 JAXBContext가 애플리케이션 당 한 번 생성되도록 보장하는 것이 었습니다.