제목 | tomcat thread dump | ||||||
글쓴이 | 이지섭 | 작성일 | 2018-04-29 | 수정일 | 2024-08-09 | 조회수 | 3566 |
톰캣에서 쓰래드 덤프 뜨는 방법이다. 우선은 톰캣 홈 밑에 webapps 밑에 manager 폴더가 있어야 한다. 톰캣에서 기본으로 제공되는 프로그램이다.
결과부터 얘기하면 http://localhost/manager/text/threaddump 위와 같이 웹에서 접근하여 쓰레드 덤프 내용을 본다.
1) 절차 1. TOMCAT_HOME/webapps/manager/META-INF 폴더 안에 있는 context.xml 파일을 수정한다.
<context privileged="true" antiresourcelocking="false">
<valve allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" classname="org.apache.catalina.valves.RemoteAddrValve">
<manager sessionattributevalueclassnamefilter="java\.lang\.(?:Boolean|Integer|Long|Number|String)|org\.apache\.catalina\.filters\.CsrfPreventionFilter\$LruCache(?:\$1)?|java\.util\.(?:Linked)?HashMap">
</manager>
→ <context privileged="true" antiresourcelocking="false">
<valve allow="^.*$" classname="org.apache.catalina.valves.RemoteAddrValve">
<manager sessionattributevalueclassnamefilter="java\.lang\.(?:Boolean|Integer|Long|Number|String)|org\.apache\.catalina\.filters\.CsrfPreventionFilter\$LruCache(?:\$1)?|java\.util\.(?:Linked)?HashMap">
</manager>
접근할 수 있는 IP 를 localhost 즉, 127.0.0.1 에서 외부의 모든 IP 에서도 접근할 수 있도록 하는 것이다.
2) 절차 2. TOMCAT_HOME/conf 폴더 안에 있는 tomcat-users.xml 파일을 수정한다. 아래 두 줄을 tomcat-users 태그 안에 추가해 넣는다.
<role rolename="manager-script"/> <user username="tomcat10" password="패스워드입력" roles="manager-script"/> http://localhost/manager/text/threaddump
와 같은 프로그램은 manager-script 권한으로 구동된다. 때문에 role 과 user 를 추가해 주어야 한다. 다시 정리하여서,
TOMCAT_HOME/webapps/manager/META-INF/context.xml : 접근 가능 IP 지정 TOMCAT_HOME/conf/tomcat-users.xml : 권한 설정 위 두 가지의 설정을 마치면
http://localhost/manager/text/threaddump 또는 http://localhost:8080/manager/text/threaddump 와 같은 접근으로 톰캣의 쓰레드 덤프 내용을 확인할 수 있다.
이때 아이디와 비밀번호를 입력하는데 tomcat-users.xml 파일에서 설정한 정보를 사용하면 되겠다. 내용은 아래와 같이 나온다. OK - JVM thread dump 2018-04-29 18:02:06.791 Full thread dump Java HotSpot(TM) 64-Bit Server VM (9.0.1+11 mixed mode): "Abandoned connection cleanup thread" Id=45 cpu=603854 ns usr=0 ns blocked 1 for -1 ms waited 3 for -1 ms java.lang.Thread.State: TIMED_WAITING locks java.util.concurrent.ThreadPoolExecutor$Worker@ddd6377 at java.base@9.0.1/java.lang.Object.wait(Native Method) - waiting on (a java.lang.ref.ReferenceQueue$Lock@4fa28c62) at java.base@9.0.1/java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:151) at com.mysql.jdbc.AbandonedConnectionCleanupThread.run(AbandonedConnectionCleanupThread.java:64) at java.base@9.0.1/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167) at java.base@9.0.1/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641) at java.base@9.0.1/java.lang.Thread.run(Thread.java:844) "ajp-nio-8009-AsyncTimeout" Id=43 cpu=264727 ns usr=0 ns blocked 0 for -1 ms waited 8 for -1 ms java.lang.Thread.State: TIMED_WAITING at java.base@9.0.1/java.lang.Thread.sleep(Native Method) at org.apache.coyote.AbstractProtocol$AsyncTimeout.run(AbstractProtocol.java:1133) at java.base@9.0.1/java.lang.Thread.run(Thread.java:844) "ajp-nio-8009-Acceptor-0" Id=42 cpu=4483464 ns usr=0 ns blocked 0 for -1 ms waited 0 for -1 ms (running in native) java.lang.Thread.State: RUNNABLE at java.base@9.0.1/sun.nio.ch.ServerSocketChannelImpl.accept0(Native Method) at java.base@9.0.1/sun.nio.ch.ServerSocketChannelImpl.accept(ServerSocketChannelImpl.java:424) at java.base@9.0.1/sun.nio.ch.ServerSocketChannelImpl.accept(ServerSocketChannelImpl.java:252) - locked (a java.lang.Object@7346f5be) index 2 frame java.base@9.0.1/sun.nio.ch.ServerSocketChannelImpl.accept(ServerSocketChannelImpl.java:252) at org.apache.tomcat.util.net.NioEndpoint$Acceptor.run(NioEndpoint.java:455) at java.base@9.0.1/java.lang.Thread.run(Thread.java:844) ... ... ... | |||||||
로그인 | Language : |