콘텐츠로 건너뛰기

아마존 EC2 메모리 부족 아파치 자동 재실행 파이썬 스크립트

    아마존 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만명정도 이상도 수용이 가능하기때문에 메모리 조절만 잘하면 버틸수 있어보입니다.

    운영해보고 더 좋은 스크립트가 만들어지면 또 공유해드리겠습니다

    파이썬을 몰라도 그냥 그대로 복사 붙여넣기 하면 사용가능할정도로 쉬운 구문이니 복사 붙여넣기 해서 돌려보세요.