heap 사용량 모니터링

 


#!/bin/bash

source /home/shell/env.sh

#JAVA_WHERE="/usr/bin"
#JavaNames_gc=("대상 프로세스 이름")

max_heap_usage=0
for JavaName in "${JavaNames_gc[@]}"
do

# 검색되는 프로세스들의 PID를 추출
pid=$(ps aux | grep $JavaName | grep -v grep | awk '{print $2}')

  • ps aux 명령어를 사용하여 JavaName과 일치하는 프로세스를 찾고, 해당 프로세스의 PID를 추출


# PID가 없을 경우 1 출력 후 종료
if [ -z "$pid" ]; then
    echo 101
    exit 0
fi

  • PID가 비어 있는지 확인하고, 비어 있으면 101을 출력한 후 스크립트를 종료


# 각 PID의 CPU 사용량 중 최대값을 추출
        result=$("$JAVA_WHERE"/jstat -gc "$pid" | tail -n 1 | awk '{print ($3+$4+$6+$8)/($7+$5+$1)*100}')

  • jstat -gc 명령어를 사용하여 가비지 컬렉션(GC) 정보를 가져오고, 특정 필드의 값을 계산하여 result 변수에 저장

        HEAP_MEMORY_USAGE=$(printf "%.of" "$result")

  • result 값을 정수로 포맷팅하여 HEAP_MEMORY_USAGE 변수에 저장


        # echo $pid $HEAP_MEMORY_USAGE $result
        if [ $HEAP_MEMORY_USAGE -gt $max_heap_usage ]

        then
            max_heap_usage=$HEAP_MEMORY_USAGE
        fi

  • 현재 힙 사용량이 최대 힙 사용량보다 큰 경우, max_heap_usage 변수를 갱신


done

echo $max_heap_usage


더보기

#!/bin/bash

source /home/shell/env.sh

#JAVA_WHERE="/usr/bin"
#JavaNames_gc=("대상 프로세스 이름")

max_heap_usage=0
for JavaName in "${JavaNames_gc[@]}"
do

# 검색되는 프로세스들의 PID를 추출
pid=$(ps aux | grep $JavaName | grep -v grep | awk '{print $2}')

# PID가 없을 경우 1 출력 후 종료
if [ -z "$pid" ]; then
    echo 101
    exit 0
fi



# 각 PID의 CPU 사용량 중 최대값을 추출
        result=$("$JAVA_WHERE"/jstat -gc "$pid" | tail -n 1 | awk '{print ($3+$4+$6+$8)/($7+$5+$1)*100}')
        HEAP_MEMORY_USAGE=$(printf "%.of" "$result")

        # echo $pid $HEAP_MEMORY_USAGE $result
        if [ $HEAP_MEMORY_USAGE -gt $max_heap_usage ]
        then
            max_heap_usage=$HEAP_MEMORY_USAGE
        fi
done

echo $max_heap_usage

+ Recent posts