2019년 7월 12일 금요일

java thread dump 스크립트

java process 가 서비스를 수행 중 느려지거나, 아무런 동작하지 않을 때(locked) 현재 그 java process 상태를 확인 하기 위해서 thread dump를 많이 사용한다. 
thread dump를 남기는 방법은 두가지가 있다.

kill -3 or jstack command를 사용할 수 있는데,

kill -3 은 stdout 파일 예를들면 catalina.out 파일에 dump를 남기고
jstack의 경우에는 console 화면에 보여진다. 
console 보여진다는 의미는 jstack $PID 를 실행하였을 시에 모니터 화면에 바로 볼 수있다. 

thread dump 를 생성하는 방법은 동일하지만, 로그 내용을 쓰는데는 방식이 다르다.

catalina.out을 통해서 보는것도 좋지만, vi에서 화면을 오르랄 내리락 해야하기 때문에 jstack을 통해서 thread dump 내용을 파일로 리다이렉션 하는 것이 좀더 편해 보인다. 

jstack으로 thread dump를 생성하는 것을 bash scripts 로 만들었다. 

#!/bin/bash

export CATALINA_BASE=$(dirname $(dirname $(realpath $0)))
. $CATALINA_BASE/bin/env.sh > /dev/null

DATE=`date +%Y-%m-%d`

# 2초에 한번씩 총 5번 thread dump를 생성
for count in 1 2 3 4 5; do
    echo "# Thread Dump : $count"
    for i in `ps -ef | grep java | grep "$SERVER_NAME " | awk '{print $2}'`;do
echo "# PID [$i] jstack is running "
$JAVA_HOME/bin/jstack -l $i >  $LOG_DIR/threaddump.$DATE
echo "# sleep 2 sec"
sleep 2;
    done
    echo "done"
    sleep 3
done
echo ""
# thread dump 로그파일을 남김
echo "# Dumpfile is  $LOG_DIR/threaddump.$DATE"
echo ""

댓글 없음:

댓글 쓰기