아마존 EC2 운영중 특정 패턴에 대해서 메모리 부족 현상이 자주 발생합니다.
그 부분을 해결하기 위해 성능향상쪽으로 투자하였습니다.
하지만 시간만 늘어났을뿐 근본적으로 해결이 되지 않아 파이썬3를 이용하여 자동 실행 스크립트를 만들어보았습니다.
메모리 사용량이 90%에 도달할 경우 자동으로 아파치 서버를 재실행 해주므로써 전체 메모리를 해제시키는 방법입니다.
메모리가 100%에 도달하여 스왑파일까지 넘어갈경우 그때부터는 SSH 접속부터 어렵고 시스템이 무척 느려지기때문에 메모리가 90~95% 도달지점에
아파치 서버를 재실행하는것이 더 효율적으로 보여 데몬으로 5분단위로 메모리를 체크하는 스크립트입니다.
파이썬3가 설치되어져 있으신분들은 아래 명령어를 그대로 복사하여 사용하면됩니다.
#pip 설치
curl https://vlog.tion.co.kr/python/get-pip.py -o get-pip.py
python3 get-pip.py
#pip install psutil 모듈 추가
pip install psutil
#pip list 확인
pip list
#메모리 체크 스크립트 (각자 상황에 맞춰 limit 부분을 조절합니다. 저는 90%로 맞추었습니다)
mkdir /root/_PYTHON3
vi /root/_PYTHON3/memcheck_httpd_restart.py
import psutil
import os
mem = psutil.virtual_memory().percent
limit = 90
print("MEMORY percent is %d%%" % mem)
print("MEMORY limit is over %d%%" % limit)
if mem > limit:
os.system("service httpd restart")
#ESC -> :wq 눌러 저장하고 에디터에서 빠져나옵니다.
#IndentationError: expected an indented block 에러가 나오면 if문 안쪽 들여쓰기가 안될경우입니다
#파이썬 스크립트 동작 확인
python3 /root/_PYTHON3/memcheck_httpd_restart.py
#크론탭 5분마다 실행 등록
crontab -e
*/5 * * * * python3 /root/_PYTHON3/memcheck_httpd_restart.py
이 스크립트를 5분마다 실행하여 메모리를 확인하게되면
메모리가 90%에 도달했을때 아파치 서버를 재실행하게됩니다.
만약 5분안에 이미 메모리가 100%에 도달하여 시스템 동작이 버벅일경우 재실행이 안될수 있으므로
각자 상황에 맞춰서 limit % 제한을 조절하셔야합니다.
데몬은 너무 빠른 시간보다 적당하게 3분~10분정도 조절하면 됩니다.
성능에도 어느정도 투자를 하여야하지만 지금은 하루 1만명정도 이상도 수용이 가능하기때문에 메모리 조절만 잘하면 버틸수 있어보입니다.
운영해보고 더 좋은 스크립트가 만들어지면 또 공유해드리겠습니다
파이썬을 몰라도 그냥 그대로 복사 붙여넣기 하면 사용가능할정도로 쉬운 구문이니 복사 붙여넣기 해서 돌려보세요.