어플리케이션 진단하기
1. 애플리케이션 문제 원인
2. 애플리케이션 문제 해결
Thread 덤프 생성
$ ps -ef | pgrep java
$ jstack [pid] > thread.dumpThread 덤프 내용
결론(강의자료 발췌)
Last updated
$ ps -ef | pgrep java
$ jstack [pid] > thread.dumpLast updated
2021-04-10 10:40:53
Full thread dump OpenJDK 64-Bit Server VM (11.0.10+9 mixed mode, sharing):
Threads class SMR info:
_java_thread_list=0x00007fb45c00d160, length=28, elements={
0x00007fb4a011d000, 0x00007fb4a011f000, 0x00007fb4a0126000, 0x00007fb4a0128000,
0x00007fb4a012a000, 0x00007fb4a012c000, 0x00007fb4a012e000, 0x00007fb4a0163000,
0x00007fb4a0b02800, 0x00007fb4a0af3000, 0x00007fb4a0db4000, 0x00007fb4a0af5000,
0x00007fb4a0901000, 0x00007fb4a1344800, 0x00007fb4a0df5000, 0x00007fb4a0cc6000,
0x00007fb4a12ba000, 0x00007fb4a12bb800, 0x00007fb4a0f40000, 0x00007fb4a0f42800,
0x00007fb4a13fb800, 0x00007fb4a13fd800, 0x00007fb4a13ff800, 0x00007fb4a1170800,
0x00007fb4a11bb000, 0x00007fb4a11be000, 0x00007fb4a0015800, 0x00007fb45c00e000
}
"Reference Handler" #2 daemon prio=10 os_prio=0 cpu=4.94ms elapsed=79597.97s tid=0x00007fb4a011d000 nid=0xd waiting on condition [0x00007fb4a4501000]
java.lang.Thread.State: RUNNABLE
at java.lang.ref.Reference.waitForReferencePendingList(java.base@11.0.10/Native Method)
at java.lang.ref.Reference.processPendingReferences(java.base@11.0.10/Unknown Source)
at java.lang.ref.Reference$ReferenceHandler.run(java.base@11.0.10/Unknown Source)
"Finalizer" #3 daemon prio=8 os_prio=0 cpu=1.03ms elapsed=79597.97s tid=0x00007fb4a011f000 nid=0xe in Object.wait() [0x00007fb4a4400000]
java.lang.Thread.State: WAITING (on object monitor)
at java.lang.Object.wait(java.base@11.0.10/Native Method)
- waiting on <no object reference available>
at java.lang.ref.ReferenceQueue.remove(java.base@11.0.10/Unknown Source)
- waiting to re-lock in wait() <0x00000000c29a9958> (a java.lang.ref.ReferenceQueue$Lock)
at java.lang.ref.ReferenceQueue.remove(java.base@11.0.10/Unknown Source)
at java.lang.ref.Finalizer$FinalizerThread.run(java.base@11.0.10/Unknown Source)
"Signal Dispatcher" #4 daemon prio=9 os_prio=0 cpu=0.33ms elapsed=79597.97s tid=0x00007fb4a0126000 nid=0xf runnable [0x0000000000000000]
java.lang.Thread.State: RUNNABLE
"Service Thread" #5 daemon prio=9 os_prio=0 cpu=0.07ms elapsed=79597.97s tid=0x00007fb4a0128000 nid=0x10 runnable [0x0000000000000000]
java.lang.Thread.State: RUNNABLE
"C2 CompilerThread0" #6 daemon prio=9 os_prio=0 cpu=15538.31ms elapsed=79597.97s tid=0x00007fb4a012a000 nid=0x11 waiting on condition [0x0000000000000000]
java.lang.Thread.State: RUNNABLE
No compile task
"C1 CompilerThread0" #7 daemon prio=9 os_prio=0 cpu=3893.39ms elapsed=79597.97s tid=0x00007fb4a012c000 nid=0x12 waiting on condition [0x0000000000000000]
java.lang.Thread.State: RUNNABLE
No compile task
"Sweeper thread" #8 daemon prio=9 os_prio=0 cpu=6.82ms elapsed=79597.97s tid=0x00007fb4a012e000 nid=0x13 runnable [0x0000000000000000]
java.lang.Thread.State: RUNNABLEFound one Java-level deadlock:
=============================
"http-nio-8080-exec-6":
waiting to lock monitor 0x00007faa62973608 (object 0x00000005c0c4b1e8, a java.lang.Object),
which is held by "http-nio-8080-exec-5"
"http-nio-8080-exec-5":
waiting to lock monitor 0x00007faa60025508 (object 0x00000005c0c4b1f8, a java.lang.Object),
which is held by "http-nio-8080-exec-6"
Java stack information for the threads listed above:
===================================================
"http-nio-8080-exec-6":
at nextstep.subway.line.ui.LineController.findLockLeft(LineController.java:78)
- waiting to lock <0x00000005c0c4b1e8> (a java.lang.Object)"http-nio-8080-exec-6" #47 daemon prio=5 os_prio=31 tid=0x00007faa6132c000 nid=0x7f03 waiting for monitor entry [0x0000700009bce000]
java.lang.Thread.State: BLOCKED (on object monitor)
at nextstep.subway.line.ui.LineController.findLockLeft(LineController.java:78)
- waiting to lock <0x00000005c0c4b1e8> (a java.lang.Object)
- locked <0x00000005c0c4b1f8> (a java.lang.Object)