지정된 Java 프로세스의 로그 파일에서 마지막 두 줄의 숫자를 비교하고 그 차이를 계산하여 합산합니다.

 


#!/bin/bash

source /home/shell/env.sh


#JavaNames_gc=("대상 프로세스 이름")

total=0

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

log_file=$MY_HOME_LOG/log_gccount_$JavaName.log

  • 각 Java 프로세스의 로그 파일 경로를 설정
  • MY_HOME_LOG는 환경 변수이며, 로그 파일 이름은 log_gccount_<JavaName>.log 형식입니다.


# 마지막 두 줄 가져오기
LAST_TWO_LINES=$(tail -n 2 $log_file)

  • tail -n 2 명령어로 로그 파일의 마지막 두 줄을 가져와 LAST_TWO_LINES 변수에 저장


# 마지막 줄과 마지막에서 두 번째 줄의 숫자 추출
LAST_LINE_NUM=$(echo "$LAST_TWO_LINES" | tail -n 1 | grep -o '[0-9]\+')

  • echo "$LAST_TWO_LINES"로 마지막 두 줄을 출력하고, tail -n 1으로 마지막 줄을 가져온 후, grep -o '[0-9]\+'로 숫자만 추출하여 LAST_LINE_NUM 변수에 저장

SECOND_LAST_LINE_NUM=$(echo "$LAST_TWO_LINES" | head -n 1 | grep -o '[0-9]\+')

  • echo "$LAST_TWO_LINES"로 마지막 두 줄을 출력하고, head -n 1으로 첫 번째 줄을 가져온 후, grep -o '[0-9]\+'로 숫자만 추출하여 SECOND_LAST_LINE_NUM 변수에 저장


# 두 숫자의 차이 계산
DIFFERENCE=$( (LAST_LINE_NUM - SECOND_LAST_LINE_NUM) )

  • LAST_LINE_NUM과 SECOND_LAST_LINE_NUM의 차이를 계산하여 DIFFERENCE 변수에 저장합니다.


# 차이 출력
total=$(expr $total + $DIFFERENCE)

done

echo $total


 

더보기

#!/bin/bash

source /home/shell/env.sh


#JavaNames_gc=("대상 프로세스 이름")

total=0

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

log_file=$MY_HOME_LOG/log_gccount_$JavaName.log

# 마지막 두 줄 가져오기
LAST_TWO_LINES=$(tail -n 2 $log_file)

# 마지막 줄과 마지막에서 두 번째 줄의 숫자 추출
LAST_LINE_NUM=$(echo "$LAST_TWO_LINES" | tail -n 1 | grep -o '[0-9]\+')
SECOND_LAST_LINE_NUM=$(echo "$LAST_TWO_LINES" | head -n 1 | grep -o '[0-9]\+')

# 두 숫자의 차이 계산
DIFFERENCE=$( (LAST_LINE_NUM - SECOND_LAST_LINE_NUM) )

# 차이 출력
total=$(expr $total + $DIFFERENCE)

done

echo $total

이 스크립트는 주어진 Java 프로세스들의 GC(Garbage Collection) 카운트를 확인하고, 최대 GC 카운트를 출력하는 작업을 수행합니다.

 


#!/bin/bash

source /home/shell/env.sh


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

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

  • 배열 JavaNames_gc의 각 요소에 대해 루프를 시작

do


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

  • ps aux 명령어로 모든 프로세스를 나열하고, grep $JavaName으로 해당 Java 프로세스 필터링
  • grep -v grep으로 grep 명령 자체를 제외하고, awk '{print $2}'로 PID 추출


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


# gc 카운트를 출력
GC_COUNT=$("$JAVA_WHERE"/jstat -gcold "$pid" | tail -n 1 | awk '{print $8}')

  • jstat -gcold $pid 명령어로 지정된 PID의 GC 정보를 확인하고, tail -n 1으로 마지막 줄을 추출
  • awk '{print $8}'로 GC 카운트를 추출


if [ $GC_COUNT -gt $max_GC_COUNT ]
then
    max_GC_COUNT=$GC_COUNT
fi

done

echo $max_GC_COUNT

 


더보기

#!/bin/bash

source /home/shell/env.sh


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

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


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

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


# gc 카운트를 출력
GC_COUNT=$("$JAVA_WHERE"/jstat -gcold "$pid" | tail -n 1 | awk '{print $8}')

if [ $GC_COUNT -gt $max_GC_COUNT ]
then
    max_GC_COUNT=$GC_COUNT
fi

done

echo $max_GC_COUNT

이 스크립트는 주어진 로그 경로에서 특정 패턴(예: "error" 또는 "exception")을 포함하는 가장 최근의 로그 파일을 찾아 그 안의 오류 수를 세는 작업을 수행합니다.

 


#!/bin/bash

source /home/shell/env.sh

# 로그 패스 별로 한 개씩 만든다

LOG_PATH_1="/tomcat/logs

  • 로그 파일이 위치한 경로를 변수로 저장

#체크할 로그를 배열로 입력
LOG_NAMES_1=("tomcat*")

  • 체크할 로그 파일 이름 패턴을 배열에 저장
  • 위 경우, "tomcat"으로 시작하는 모든 로그 파일입니다.

checkline_1=1000

  • 로그 파일의 마지막 1000줄만 검사하도록 설정

check_1="error|exception"

  • "error" 또는 "exception" 문자열을 포함한 로그를 검색할 패턴 정의

error_count=0

  • 오류의 총 개수를 저장할 변수 초기화


for LOG_NAME in "${LOG_NAMES_1[@]}"

  • 배열 LOG_NAMES_1의 각 요소에 대해 루프 시작


do

# 로그 경로에서 특정 문구를 포함한 로그 파일 중 가장 최근 것을 불러오는 스크립트
logfile=$(find $LOG_PATH_!1 -type f -name $LOG_NAME -prints '%T@ %p\n' | sort -n | tail -1 | awk '{print $2}')

  • find 명령어를 사용하여 LOG_PATH_1에서 LOG_NAME 패턴에 맞는 파일들을 찾습니다.
  • -type f는 파일만 검색하도록 설정
  • -name $LOG_NAME는 파일 이름 패턴 지정
  • -prints '%T@ %p\n'는 파일의 수정 시간을 포함한 출력 형식 지정
  • sort -n는 시간 순으로 정렬
  • tail -1은 가장 최신 파일을 선택
  • awk '{print $2}'는 파일 이름만 추출


# errors 수 표현
if [ -s "$logfile" ]; then

  • logfile이 비어 있지 않은지 확인

    errors=$(tail -$checkline_1 "$logfile" | grep -iE "$check_1" | wc -l)

  • tail -$checkline_1 "$logfile"는 로그 파일의 마지막 checkline_1줄을 가져옴
  • grep -iE "$check_1"는 대소문자 구분 없이 패턴에 맞는 줄 검색
  • wc -l는 매칭된 줄의 수를 셉니다.

    error_count=$(expr $error_count + $errors)

  • 현재 로그 파일에서 발견된 오류 수를 error_count에 더함

else
    echo 101
    exit 0
fi

done

echo $error_count


 

더보기

#!/bin/bash

source /home/shell/env.sh

# 로그 패스 별로 한 개씩 만든다

LOG_PATH_1="/tomcat/logs
#체크할 로그를 배열로 입력
LOG_NAMES_1=("tomcat*")
checkline_1=1000
check_1="error|exception"

error_count=0

for LOG_NAME in "${LOG_NAMES_1[@]}"
do

# 로그 경로에서 특정 문구를 포함한 로그 파일 중 가장 최근 것을 불러오는 스크립트
logfile=$(find $LOG_PATH_!1 -type f -name $LOG_NAME -prints '%T@ %p\n' | sort -n | tail -1 | awk '{print $2}')

# errors 수 표현
if [ -s "$logfile" ]; then
    errors=$(tail -$checkline_1 "$logfile" | grep -iE "$check_1" | wc -l)
    error_count=$(expr $error_count + $errors)
else
    echo 101
    exit 0
fi

done

echo $error_count

 

이번 작업은 디스크 사용량을 확인할 수 있는 스크립트입니다.

지정된 디스크 경로들의 사용률을 확인하고, 그중 최대 사용률을 출력합니다.

 


#!/bin/bash

source /home/shell/env.sh


# 배열 변수에 디스크 경로 저장
max_disk_usage=0

  • 최대 디스크 사용률을 저장할 변수 초기화


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

  • disk_paths 배열이 비어있는지 확인합니다.
  • 비어있다면 -z 조건이 참
  • disk_paths가 비어있을 경우, 101 출력


# 배열 순회하며 각 디스크의 사용률 확인
for disk_path in "${disk_paths[@]}"

  • disk_paths 배열의 각 요소에 대해 루프


do
   # df 명령어를 사용하여 디스크 사용률 확인
   disk_usage=$(df -h $disk_path | awk '{print $5}' | tail -n 1 | sed 's/%//')

  • df -h 명령어를 사용하여 disk_path의 디스크 사용률 확인
  • awk '{print $5}'는 사용률 컬럼 선택
  • tail -n 1은 마지막 줄 선택
  • sed 's/%//'는 퍼센트 기호 제거

   if [ "${disk_usage}" -ge "${max_disk_usage}" ]

  • 현재 디스크 사용률이 최대 사용률보다 크거나 같은지 확인

   then
      max_disk_usage=$disk_usage

  • 조건이 참이면, 최대 사용률을 현재 디스크 사용률로 업데이트

   fi
done

echo $max_disk_usage


 

더보기

#!/bin/bash

source /home/shell/env.sh


# 배열 변수에 디스크 경로 저장
max_disk_usage=0

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


# 배열 순회하며 각 디스크의 사용률 확인
for disk_path in "${disk_paths[@]}"
do
   # df 명령어를 사용하여 디스크 사용률 확인
   disk_usage=$(df -h $disk_path | awk '{print $5}' | tail -n 1 | sed 's/%//')

   if [ "${disk_usage}" -ge "${max_disk_usage}" ]
   then
      max_disk_usage=$disk_usage
   fi
done

echo $max_disk_usage

 

이번 작업은 CPU사용량에 대한 모니터링 스크립트를 만들어 보겠습니다.

 


# cpu.sh
#!/bin/bash

source /home/shell/env.sh

  •  /home/shell/env.sh 스크립트를 현재 스크립트에 포함
  • 따라서 env.sh 파일에 정의된 변수를 현재 스크립트에서 사용 가능

 

# 쓰레드를 모니터링하고자 하는 프로세스 패턴 문구
# env.sh에서 받아옴
# CpuProcessNames=("tomcat" "httpd" "java")

max_cpu_usage=0
for ProcessName in "${CpuProcessNames[@]}"
do

  • 최대 CPU 사용량을 저장할 변수를 초기화
  • CpuProcessNames 배열에 있는 각 프로세스에 대해 반복


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

  • 각 프로세스의 PID를 찾음.
  • ps aux 명령으로 프로세스 목록을 가져와서 해당 패턴을 가진 프로세스를 찾고, awk를 사용하여 PID를 추출


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

  • 만약 PID가 없으면(즉, 해당 프로세스가 실행 중이 아니면) 101을 출력하고 스크립트를 종료

 


# 각 PID의 CPU 사용량 중 최대값을 추출
for pid in $pids
do
cpu_usage=$(ps -p $pid -o %cpu | tail -n +2)

  • 각 PID에 대한 CPU 사용량을 찾음
  • ps 명령어로 CPU 사용량을 가져오고, awk를 사용하여 필요한 정보를 추출


cpu_usage=$(echo $cpu_usage | awk -F. '{print $1}')

  • CPU 사용량을 정수 형태로 변환


if [ "$cpu_usage -gt $max_cpu_usage" ]

  • 현재 CPU 사용량이 최대 CPU 사용량보다 큰지 확인


then
    max_cpu_usgae=$cpu_usage
fi
done

done


# 최대 CPU 사용량을 출력
echo "$max_cpu_usage"

 


 

더보기

#!/bin/bash

source /home/shell/env.sh

# 쓰레드를 모니터링하고자 하는 프로세스 패턴 문구
# env.sh에서 받아옴
# CpuProcessNames=("tomcat" "httpd" "java")

max_cpu_usage=0
for ProcessName in "${CpuProcessNames[@]}"
do

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

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

# 각 PID의 CPU 사용량 중 최대값을 추출
for pid in $pids
do
cpu_usage=$(ps -p $pid -o %cpu | tail -n +2)
cpu_usage=$(echo $cpu_usage | awk -F. '{print $1}')
if [ "$cpu_usage -gt $max_cpu_usage" ]
then
    max_cpu_usgae=$cpu_usage
fi
done

done

# 최대 CPU 사용량을 출력
echo "$max_cpu_usage"

'리눅스' 카테고리의 다른 글

모니터링 쉘 스크립트 만들기(4)  (0) 2024.05.23
모니터링 쉘 스크립트 만들기(3)  (0) 2024.05.22
모니터링 쉘 스크립트 만들기(1)  (1) 2024.05.20
nginx 업그레이드  (0) 2024.05.14
GC 로그 및 heap 덤프 설정  (0) 2024.05.13

먼저 env.sh 파일을 만들어 줍니다.

 

env.sh은 이후 만들 쉘 스크립트 파일의 기본 환경 설정을 담고 있는 스크립트입니다.

 


env.sh
#!/bin/bash

#Java  디렉토리 지정
JAVA_WHERE="/usr/bin"

  • JAVA_WHERE: Java가 설치된 디렉토리를 지정

#모니터링 스크립트가 존재하는 위치
MY_HOME="/home/shell"
MY_HOME_LOG="/home/shell/logs"

  • MY_HOME, MY_HOME_LOG: 모니터링 스크립트와 로그가 저장된 경로



# process 변수 (프로세스 그룹 단위로 한 개씩 생성)
# 각각 체크하고자 하는 프로세스 그룹 단위로 구분자 입력
ProcessName1="프로세스 이름"

  • ProcessName1: 모니터링할 프로세스 그룹의 이름


# disk 변수
# 체크할 각 디스크를 배열로 입력
disk_paths=( "/" "/tomcat" )
disk_limit=85

  • disk_paths: 모니터링할 디스크 경로의 배열
  • disk_limit: 디스크 사용량 제한(백분율)


# uptime 변수
# 체크할 프로세스를 배열로 입력
CpuProcessName=("java")
cpu_time_limit=31536000

  • CpuProcessName: CPU 가동 시간을 모니터링할 프로세스의 배열
  • cpu_time_limit: CPU 가동 시간제한(초)


# port 변수
# 체크할 프로세스를 배열로 입력
port_list=("80" "8080")

  • port_list: 모니터링할 포트의 배열


# exception 변수 (디렉토리 별로 한 개 씩 생성)
# 체크할 디렉토리
LOG_PATH_1="/tomcat/logs
#체크할 로그를 배열로 입력
LOG_NAMES_1=("tomcat*")
checkline_1=1000
check_1="exception"

  • LOG_PATH_1: 예외 로그가 저장된 디렉토리
  • LOG_NAMES_1: 예외를 확인할 로그 이름의 배열
  • checkline_1: 로그를 확인할 줄 번호
  • check_1: 예외를 확인할 패턴



# access 변수 (정상 체크 코드가 로그의 몇 번째 인지 수정할 필요가 있음)
# 체크할 디렉토리
LOG_PATH_a1="/tomcat"
# 체크할 로그를 배열로 입력
LOG_NAMES_a1=("access*")
checkline_a1=1000
# 로그에서 에러 코드가 검출될 컬럼의 위치
charNumber_a1=9
check_a1="401|402|403|404|405|501|502|503|504|505"

  • LOG_PATH_a1: 접근 로그가 저장된 디렉토리
  • LOG_NAMES_a1: 접근을 확인할 로그 이름의 배열
  • checkline_a1: 로그를 확인할 줄 번호
  • charNumber_a1: 로그에서 에러 코드의 위치
  • check_a1: 확인할 에러 코드


# fullgc, gcincrease, gc_cron, heap 변수
# 체크할 프로세스를 배열로 입력 (한 개만 특정될 수 있도록 지정)
JavaNames_gc=("tomcat8")

  • GC (Garbage Collection) 관련 프로세스를 체크하기 위해 사용
  • 이 변수에는 GC와 관련된 프로세스의 이름의 배열


# oome 변수
# 체크할 힙 덤프 경로를 배열로 입력
LOG_PATHS_OOME=("/tomcat/logs/gc")
DAYS=3

  • OOME (Out Of Memory Error) 에러를 체크하기 위한 변수
  • OOME이 발생한 경우 힙 덤프가 기록되는 경로를 지정
  • 힙 덤프 경로를 배열로 나타냅니다.
  • OOME 이후 힙 덤프를 유지하는 기간(3일)


# traffic, hang 변수
# 검출 트래픽 배수
# 초기값 : 10, 서비스 특성에 따라 조정
traffic=10
# Hang으로 판단할 로그 미생성 분
# 초기값 60, 서비스 특성에 따라 조정
HANG_TIME=60

  • 트래픽을 검출하는 데 사용되는 변수
  • 초기값은 10으로 설정되어 있으며, 서비스 특성에 따라 조정될 수 있습니다.
  • 로그가 생성되지 않은 상태로 유지되는 시간
  • 초기값은 60분으로 설정되어 있으며, 서비스 특성에 따라 조정될 수 있습니다.

 


# 로그 크기를 확인할 과가 기록 수(1분 단위)
GET_NUM=300

  • 로그 크기를 확인하기 위해 기록된 과거 데이터의 수



# log cron 변수 (로그 경로마다 한 개씩 만든다)
# "Monday" "Tuesday" "Wednesday" "Thursday" "Friday" "Saturday" " Sunday"

GCCountStartTime=0
GCCountEndTime=24
GCCountDays=("Monday" "Tuesday" "Wednesday" "Thursday" "Friday" "Saturday" " Sunday")

  • GC 이벤트를 세는 데 사용되는 시간대를 설정
  • 여기서는 0부터 24시까지로 설정
  • 이벤트는 매일 모니터링
  • GC 이벤트를 세는 요일을 지정


LogStartTime=6
LogEndTime=20
LogDays=("Monday" "Tuesday" "Wednesday" "Thursday" "Friday")

  • 로그를 확인하는 시간대를 설정
  • 로그를 확인하는 요일을 지정


LOG_PATH_LOG_1="/tomcat/logs"
LOG_NAMES_LOG_1=("tomcat*")

  • 로그 파일이 있는 디렉토리 경로를 지정
  • 체크할 로그 파일의 이름을 지정

 

더보기

env.sh
#!/bin/bash

#Java  디렉토리 지정
JAVA_WHERE="/usr/bin"
#모니터링 스크립트가 존재하는 위치
MY_HOME="/home/shell"
MY_HOME_LOG="/home/shell/logs"

# process 변수 (프로세스 그룹 단위로 한 개 씩 생성)
# 각각 체크하고자 하는 프로세스 그룹 단위로 구분자 입력
ProcessName1="프로세스 이름"



# disk 변수
# 체크할 각 디스크를 배열로 입력
disk_paths=( "/" "/tomcat" )
disk_limit=85


# uptime 변수
# 체크할 프로세스를 배열로 입력
CpuProcessName=("java")
cpu_time_limit=31536000


# port 변수
# 체크할 프로세스를 배열로 입력
port_list=("80" "8080")


# exception 변수 (디렉토리 별로 한 개 씩 생성)
# 체크할 디렉토리
LOG_PATH_1="/tomcat/logs
#체크할 로그를 배열로 입력
LOG_NAMES_1=("tomcat*")
checkline_1=1000
check_1="exception"



# access 변수 (정상 체크 코드가 로그의 몇 번째 인지 수정할 필요가 있음)
# 체크할 디렉토리
LOG_PATH_a1="/tomcat"
# 체크할 로그를 배열로 입력
LOG_NAMES_a1=("access*")
checkline_a1=1000
# 로그에서 에러 코드가 검출될 컬럼의 위치
charNumber_a1=9
check_a1="401|402|403|404|405|501|502|503|504|505"



# fullgc, gcincrease, gc_cron, heap 변수
# 체크할 프로세스를 배열로 입력 (한 개만 특정될 수 있도록 지정
JavaNames_gc=("tomcat8")


# oome 변수
# 체크할 힙 덤프 경로를 배열로 입력
LOG_PATHS_OOME=("/tomcat/logs/gc")
DAYS=3


# traffic, hang 변수
# 검출 트래픽 배수
# 초기값 : 10, 서비스 특성에 따라 조정
traffic=10
# Hang으로 판단할 로그 미생성 분
# 초기값 60, 서비스 특성에 따라 조정
HANG_TIME=60

# 로그 크기를 확인할 과가 기록 수(1분 단위)
GET_NUM=300


# log cron 변수 (로그 경로마다 한 개 씩 만든다)
# "Monday" "Tuesday" "Wednesday" "Thursday" "Friday" "Saturday" " Sunday"

GCCountStartTime=0
GCCountEndTime=24
GCCountDays=("Monday" "Tuesday" "Wednesday" "Thursday" "Friday" "Saturday" " Sunday")

LogStartTime=6
LogEndTime=20
LogDays=("Monday" "Tuesday" "Wednesday" "Thursday" "Friday")

LOG_PATH_LOG_1="/tomcat/logs"
LOG_NAMES_LOG_1=("tomcat*")

 

'리눅스' 카테고리의 다른 글

모니터링 쉘 스크립트 만들기(3)  (0) 2024.05.22
모니터링 쉘 스크립트 만들기(2)  (0) 2024.05.21
nginx 업그레이드  (0) 2024.05.14
GC 로그 및 heap 덤프 설정  (0) 2024.05.13
jstat 항목별 의미  (0) 2024.05.08

기존 버전 : 1.19.9

업그레이드 할 버전 : 1.25.3

 

cp -r /etc/nginx /tmp/nginx.backup

systemctl stop nginx (현재 버전에서 재기동 잘 되는지 확인하기 위해 start 한 번 실행하고 작업 진행하면 좋음)

wget /https://nginx.org/download/nginx-1.25.3.tar.gz

tar -zxvf nginx-1.25.3.tar.gz

cd nginx-1.25.3

./configure --prefix=/etc/nginx

make

make install

 

 기존 nginx 설정을 가져올 경우 백업해놓은 디렉터리로 접근하여 nginx.conf를 가져오면 된다.

'리눅스' 카테고리의 다른 글

모니터링 쉘 스크립트 만들기(2)  (0) 2024.05.21
모니터링 쉘 스크립트 만들기(1)  (1) 2024.05.20
GC 로그 및 heap 덤프 설정  (0) 2024.05.13
jstat 항목별 의미  (0) 2024.05.08
Ansible  (0) 2022.11.04

JAVA_OPTS="${JAVA_OPTS} -Xms8192m -Xmx8192m"

  • Java 가상 머신의 초기 힙 크기를 8192MB로 설정합니다. 즉, Java 프로세스가 시작될 때 할당되는 힙 메모리의 최솟값을 지정합니다.
  • Java 가상 머신의 최대 힙 크기를 8192MB로 설정합니다. 이는 Java 프로세스가 사용할 수 있는 최대 힙 메모리 크기를 제한합니다.

JAVA_OPTS="${JAVA_OPTS} -XX:MaxMetaspaceSize-1024m"

  • Metaspace의 최대 크기를 1024MB로 설정합니다.
  • Metaspace는 클래스 메타데이터를 저장하는 데 사용되는 JVM 메모리 영역입니다.

JAVA_OPTS="${JAVA_OPTS} -XX:+UseParallelGC"

  • 병렬 가비지 컬렉션을 사용합니다.
  • 이는 메모리 관리를 위해 Java의 Garbage Collector가 여러 스레드를 사용하여 동시에 가비지 컬렉션을 수행하도록 합니다.

JAVA_OPTS="${JAVA_OPTS} -XX:+UseparallelOldGC"

  • 이전 세대의 병렬 가비지 컬렉션을 사용합니다.
  • 이는 이전 세대 객체를 수거하기 위해 병렬 알고리즘을 사용하여 가비지 컬렉션을 수행합니다.

JAVA_OPTS="${JAVA_OPTS} -verbos"gc -Xloggc:/tomcat8/logs/gc/gc-tomcat-%t.log"

  • GC 로그를 자세히 출력하고, 해당 로그를 /tomcat8/logs/gc/gc-tomcat-%t.log 파일에 기록합니다.
  • %t는 로그 파일 이름에 현재 날짜 및 시간을 대체하는 플레이스홀더입니다.

JAVA_OPTS="${JAVA_OPTS} -XX:-UseAdaptiveSizePolicy"

  • 자동 크기 조정 정책 비활성화.
  • 이 옵션을 사용하면 자동으로 힙 크기를 조정하는 정책을 사용하지 않게 됩니다.

JAVA_OPTS="${JAVA_OPTS} -XX:+ExplicitGCInvokesConcurrent"

  • 명시적 가비지 컬렉션 호출이 동시 가비지 컬렉션을 유발합니다.
  • 명시적 가비지 컬렉션은 System.gc()와 같은 메서드 호출을 통해 발생할 수 있습니다.

JAVA_OPTS="${JAVA_OPTS} -XX:+HeapDumpOnOutOfMemoryError"

  • OutOfMemoryError가 발생할 때 힙 덤프를 생성합니다. 이는 메모리 부족 오류가 발생했을 때 힙 상태를 분석하는 데 도움이 됩니다.

JAVA_OPTS="${JAVA_OPTS} -XX:HeapDumpPath=/tomcat8/logs/gc/tomcat-heapdump-'date +%Y-%m-%d-%H-%M-%S'.hprof"

  • 힙 덤프 파일의 경로를 설정합니다.
  • 덤프 파일은 /tomcat8/logs/gc/ 디렉토리에 위치하며, 파일 이름에는 현재 날짜 및 시간이 포함됩니다.

export JAVA_OPTS

  • 이 명령어를 생략하면 위 옵션들이 적용되지 않습니다.

 

JAVA_OPTS="${JAVA_OPTS} -Xms8192m -Xmx8192m"
JAVA_OPTS="${JAVA_OPTS} -XX:MaxMetaspaceSize-1024m"
JAVA_OPTS="${JAVA_OPTS} -XX:+UseParallelGC"
JAVA_OPTS="${JAVA_OPTS} -XX:+UseparallelOldGC"
JAVA_OPTS="${JAVA_OPTS} -verbos"gc -Xloggc:/tomcat8/logs/gc/gc-tomcat-%t.log"
JAVA_OPTS="${JAVA_OPTS} -XX:-UseAdaptiveSizePolicy"
JAVA_OPTS="${JAVA_OPTS} -XX:+ExplicitGCInvokesConcurrent"
JAVA_OPTS="${JAVA_OPTS} -XX:+HeapDumpOnOutOfMemoryError"
JAVA_OPTS="${JAVA_OPTS} -XX:HeapDumpPath=/tomcat8/logs/gc/tomcat-heapdump-'date +%Y-%m-%d-%H-%M-%S'.hprof"
export JAVA_OPTS

'리눅스' 카테고리의 다른 글

모니터링 쉘 스크립트 만들기(1)  (1) 2024.05.20
nginx 업그레이드  (0) 2024.05.14
jstat 항목별 의미  (0) 2024.05.08
Ansible  (0) 2022.11.04
Shell Script 실습  (0) 2022.11.03

+ Recent posts