로그인

Language :
제목tomcat thread dump
글쓴이이지섭작성일2018-04-29조회수326

톰캣에서 쓰래드 덤프 뜨는 방법이다.

우선은 톰캣 홈 밑에 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)

...
...
...

댓글

이름               비밀번호 
내용
비밀번호를 확인합니다.

댓글 등록시 입력한 비밀번호를 입력해주시기 바랍니다.