1. 개요

GC Log를 분석하기 위한 스크립트를 작성하고 있으며 활용시에는 반드시 스크립트 점검하고 사용할 것

2. 코드

#!/bin/bash

LOG_DIR=/sw/apache-tomcat-8.5.53/logs
OUT_LOG=MyGCLog.log
GC_HEADER=gc.log.202

set_pid() {
  PID=`ps -ef | grep java | grep tomcat | awk {'print $2'}`
}
set_gclog() {
  NOW_GCLOG=`ls -ltr $LOG_DIR/$GC_HEADER* | tail -1 | awk {'print $9'}`
}
del_old_tail() {
  java_elapsed=`ps -eo pid,etime,time,args | grep $1 | grep -v grep | awk {'print $2'}`
  ps -eo pid,etime,time,args | grep "tail -f $LOG_DIR/$GC_HEADER" | grep -v "$NOW_GCLOG" | grep -v grep | while read line; do
    if [ "$java_elapsed" \< "`echo $line | awk {'print $2'}`" ]; then
      kill -9 `echo $line | awk {'print $1'}`
    fi
  done
}
exe_tail() {
  tail -f $NOW_GCLOG >> $LOG_DIR/$OUT_LOG &
}

set_pid
set_gclog
del_old_tail $PID
exe_tail

#echo $NOW_GCLOG

while true; do
  set_pid

  if [ "$PID" != "" ]; then
    #echo $OLD_PID
    #echo $PID

    if [ -z "$OLD_PID" ]; then
      OLD_PID=$PID
    fi

    if [ "$OLD_PID" != "$PID" ]; then
      kill -9 `ps -ef | grep "tail -f $NOW_GCLOG" | awk {'print $2'}`
      set_gclog
      exe_tail
      OLD_PID=$PID
    fi
  ##else
    #echo "xxxx"
  fi

  sleep 30
done