JRE 밖에 없을 때 deadlock 찾는 방법
- JRE 밖에 없을 때는 Thread 덤프를 읽기 위해서 SIGQUIT를 활용해야한다.
docker kill -s QUIT <container-name>
// stdout으로 나오기 때문에 docker logs로 읽어야한다.
docker logs --since 2m dev-game-blue > /tmp/dump1.txt
//
grep -n 'Found one Java-level deadlock' /tmp/dump1.txt
// 해당 Class를 기준으로 락을 쥐고 멈춘 Thread를 추출
grep -n 'locked <0x' /tmp/dump1.txt | grep <Class Name>
// result: 44118: - locked <0x00000000c4e66790> (a <Class Path>)
// 위에서 얻은 주소로 해당 lock을 기다리고 있는 thread 정보를 얻을 수 있다.
grep -c 'waiting to lock <0x00000000c4e66790>' /tmp/dump1.txt