크래시 이슈의 원인은 모듈의 메모리가 일부 해제되지 않기 때문이었다. 모듈을 실행할 때마다 메모리가 해제되지 않고 쌓이다가 용량이 다 차서 크래시가 발생하는 것이었다.
따라서 동시에 여러 요청을 보내는 것보다 일정 시간 동안 반복적으로 요청을 보내는 것이 더 중요했다. 굳이 jmeter를 쓰기보다는 쉘스크립트 코드를 작성해서 휴먼 에러를 줄이는 것이 더 효율적이겠다는 생각이 들었다.
아래의 쉘 스크립트 코드를 사용하여
6가지 절차를 쉘 스크립트 코드 하나로 끝내도록 했다.
# 모듈 옮기기
mv -i [테스트 폴더의 새 모듈] [모듈을 옮겨야 할 폴더]
# 톰캣 시작 : source [테스트할 인스턴스 경로]/bin/startup.sh
source /home/instance2/bin/startup.sh
# 몇 분 동안 테스트할 것인지 저장하는 변수
min=3
# 실행 시간 (초 단위)
duration=60*$min
# nmon 시작, 1초에 한번씩 min분 동안 기록하며, 지정된 경로에 기록한 nmon 파일을 생성한다.
nmon -f -s 1 -c $duration -m [nmon 저장할 파일]
# 현재 시간을 기준으로 종료 시간 계산
end_time=$((SECONDS + duration))
# 종료 시간이 될 때까지 계속 while문 실행
while [ $SECONDS -lt $end_time ]; do
# 시간 간격 추가: 톰캣이 시작하기 전 요청이 보내져서 response fail이 떴음
sleep 1
# curl로 요청을 보내 제대로 실행되고 있는지 확인
response=$(curl -s -o /dev/null -w "%{http_code}" -d [로컬로 http 요청]
if [ "$response" -eq 200 ]; then
echo "response: $response"
else
echo "Failed with HTTP status code: $response"
break
fi
# 시간 간격 추가: 이미지처리 작업을 수행할 시간이 필요함, 요청을 처리하는 중에 너무 많은 요청이 오면 삭제되지 못한 중간 이미지들이 쌓이는 등 크래시 발생하기도 했음
sleep 3
done
# 톰캣 종료 : source [테스트할 인스턴스 경로]/bin/shutdown.sh
source /home/instance2/bin/shutdown.sh
# nmon 프로세스 종료
kill $(ps | grep nmon | awk '{print $1}')
# 작업 완료 확인 문구
echo done