JAVA

[펌]jsp을 이용해서 쓰레드 덤프 보기

saltdoll 2011. 3. 28. 11:23
반응형
출처: 간단히 쓰레드 덤프보는 JSP

운영 서버에 문제가 발생했습니다. 어떤 요청이 문제를 일으키는 것 같습니다. 이런 경우 여러 가지 방법으로 모니터링을 합니다. 그 중 쓰레드 덤프를 뜨는 경우도 많습니다.

쓰레드 덤프 뜨고 분석하려면 JVM 프로세스에 SIGQUIT 시그널주고 로그 받아와서 사무라이 같은 걸로 분석하고 합니다. (JVM hang 걸렸을 때 thread dump 남기는 법)
계속 이런 식으로 하기 너무 귀찮아서 쉽게 쓰레드 덤프 보는 JSP 만들었습니다. 저처럼 이런 걸로 수고하시는 분들과 공유합니다.

설치 >>
모니터링 하는 거 하나 설치하려면 대부분 복잡합니다. 저는 이런 거 싫어서 그냥 JSP로 만들었습니다.(날코딩) 그냥 아래 threaddump.jsp를 다운받아 web app에 JSP 실행할 수 있는 디렉토리에 복사해 놓으면 됩니다. 참고로 Java 버전은 5 (JDK 1.5) 이상이어야 합니다.


실행 >>
그냥 복사해 놓은 JSP를 브라우저로 열면 됩니다.
http://yourserver/threaddump.jsp
그러면 아래와 같은 화면이 나올 겁니다.


간단한 메모리 정보와 현재 쓰레드들의 스택들을 보여줍니다. 브라우저 리프레쉬(F5)로 계속 변화는 상황을 분석하면 됩니다

원하는 쓰레드만 보기 >>
보고 싶은 쓰레드 그룹을 보려면 쓰레드 이름의 앞부분을 넣습니다. 그러면 해당 이름으로 시작하는 쓰레드만 볼 수 있습니다. 대개 쓰레드 그룹은 동일한 이름으로 시작합니다. 아래의 예는 Tomcat이 HTTP 서비스 하는 쓰레드만 본 예입니다.


이 중 상태가 RUNNABLE (실행) 중인 것만 보고 싶으면 thread state is ... 의 선택박스에서 선택하세요.



특정 쓰레드만 보기

분석하다가 이상한 쓰레드 스택이 발견되면 쓰레드 이름의 오른쪽 쓰레드 번호를 선택하고 모니터링하세요.
해당 쓰레드만 보여줍니다. 아래는 계속 뭔가 일하는 쓰레드를 잡은 예입니다.
에궁.. 이것 땜에 CPU가 오르락 내리락했네요. 쩝..


다시 모든 쓰레드를 보고 싶다면 "Show all threads"를 클릭하세요.


멋진... 모니터링 도구가 많이 있기는 하지만 가끔은 thread dump나 System.out 이 문제를 풀기 쉽게 하기도 합니다. 프로파일러나 APM 같은 것은 간혹 도구 자체의 부하 때문에 간섭이 일어나 엉뚱한 데이터를 보여주기도 하네요. 이럴 때는 삽질.. 

여하튼 쓰레드 덤프 많이 뜨시는 분들께 도움이 되었으면 좋겠습니다. 

반응형
도움이 되셨다면 하트모양의 "♡ 공감"을 눌러주시면 큰 격려가 됩니다.
(로그인하지 않으셔도 가능)