반응형
Java Thread Dump
애플리케이션이 갑자기 먹통이 되거나, 속도가 느려질 때 Java Thread Dump 확인하기.
프로세스 pid를 찾은 후 pid로 확인이 가능
$ ps -ef | grep tomcat
$ jstack PID
"main" #1 prio=5 os_prio=0 tid=0x00007f27f400f000 nid=0x9 runnable [0x00007f27fd741000]
java.lang.Thread.State: RUNNABLE
at java.net.PlainSocketImpl.socketAccept(Native Method)
at java.net.AbstractPlainSocketImpl.accept(AbstractPlainSocketImpl.java:409)
at java.net.ServerSocket.implAccept(ServerSocket.java:545)
at java.net.ServerSocket.accept(ServerSocket.java:513)
at org.apache.catalina.core.StandardServer.await(StandardServer.java:466)
at org.apache.catalina.startup.Catalina.await(Catalina.java:776)
at org.apache.catalina.startup.Catalina.start(Catalina.java:722)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:353)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:493)
"VM Thread" os_prio=0 tid=0x00007f27f4143800 nid=0xe runnable
"GC task thread#0 (ParallelGC)" os_prio=0 tid=0x00007f27f4024000 nid=0xa runnable
"GC task thread#1 (ParallelGC)" os_prio=0 tid=0x00007f27f4026000 nid=0xb runnable
"GC task thread#2 (ParallelGC)" os_prio=0 tid=0x00007f27f4027800 nid=0xc runnable
"GC task thread#3 (ParallelGC)" os_prio=0 tid=0x00007f27f4029800 nid=0xd runnable
"VM Periodic Task Thread" os_prio=0 tid=0x00007f27f4266800 nid=0x1c waiting on condition
JNI global references: 632
윈도우에서 PID 찾기, (jstack 사용)
JPS 명령어를 이용하여 PID를 찾을 수 있다.
JPS: Java 프로세스 상태 확인
옵션
-q 클래스 이름, jar 파일 명, main 메서드 전달된 인자만 표시
-m main 메서드에 전달도니 인자를 표시
-l 어플리케이션 main 클래스 전체 패키지 이름 또는 jar 파일의 전체 경로
-v jvm에 전달된 인자 표시
-V 클래스 이름, JAR 파일 명, main 전달 인자 모두 생략
$ jps -v
- https://docs.oracle.com/javase/8/docs/technotes/tools/unix/jps.html
- https://d2.naver.com/helloworld/10963
반응형