disqus: brainbackdoor | false
kakaoChannel: false
floatFirstTOC: right
<aside> 📌 Tomcat이 무엇인지, WAS를 진단할 때 어떤 부분들을 확인해야 하는지 등은 강의를 통해 확인할 수 있어요. 이 포스팅에서는 Thread dump에 대해 이야기할게요
</aside>
Thread dump를 통해 Thread가 무슨 일을 하는지 알 수 있어요.
$ ps -ef | pgrep java
$ jstack [pid] > thread.dump
# **생성 시간 정보**
2021-03-27 23:55:32
# JVM에 대한 정보
Full thread dump Java HotSpot(TM) 64-Bit Server VM (25.251-b08 mixed mode):
# DeadLock에 대한 정보
Found 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)
# Thread stack 정보
"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)
$ cd docker && docker-compose up -d
a. 테스트
# 상황 1
$ curl localhost:8080/lines
# 상황 2
$ curl localhost:8080/lines/lock-left
$ curl localhost:8080/lines/lock-right
# 상황 3
여러 브라우저 혹은 터미널로 요청해본다.
$ curl localhost:8080/lines/tan
$ curl localhost:8080/lines/tan
...