Swap메모리로 EC2 램 부족현상을 해결하자

이원찬·2024년 1월 18일
0

AWS

목록 보기
2/3
post-custom-banner

[AWS] Swap File을 이용해 EC2 메모리 부족 현상을 해결해보자
위 블로그를 많이 참고 하였습니다.

일단.. EC2 free티어로 Vscode의 Remote SSH를 연결 했었는데

이미 docker compose로 mysql과 nginx, tomcat, spring이 띄워져 있는 상태였다.

services:
  tomcat:
    image: tomcat:9.0.50-jdk11-openjdk
    container_name: free_tomcat
    ports:
      - "8080:8080"
    volumes:
      - ./build/libs/leewonchan_free.war:/usr/local/tomcat/webapps/leewonchan_free.war

  mysql:
    image: mysql
    container_name: free_mysql
    restart: always
    ports:
      - "3306:3306"
    environment:
      MYSQL_ROOT_PASSWORD: 1234
      MYSQL_DATABASE: jspdb
      MYSQL_USER: jspbook
      MYSQL_PASSWORD: passwd
    volumes:
      - ./leewonchan_free.sql:/docker-entrypoint-initdb.d/leewonchan_free.sql
      - ./my.cnf:/etc/mysql/conf.d/my.cnf

# 여기에 기본으로 nginx가 80번 포트로 열려있었다..

그런데 자꾸 인스턴스가 죽어서 죽은 인스턴스의 스크린샷을 가져와 보니….

아웃 오브 메모리

메모리 부족 해서 터진거였음…

swap memory로 해결하자!!

보통 swap memory는 할당된 램 메모리의 2배 또는 그 이상을 추천하고있다!

  1. 일단 ssh 연결

    ssh -i *.pem ubuntu@3.37.150.108

  2. Swap 파일 메모리를 할당한다

    sudo dd if=/dev/zero of=/swapfile bs=128M count=16
    

    dd 명령어는 파일 복사 및 변환 관련 유닉스 명령 유틸리티라 한다.

    /dev/zero는 데이터 스토리지 초기화 관련 파일이라 한다.

    bs=128M * count=16 으로 총 2GB로 swapfile 크기를 설정해주었다.

    생각 보다 시간이 걸렸다… (10초 정도?)

  3. swapfile에 접근할 수 있는 권한을 설정한다

    # swapfile 권한 세팅 (READ, WRITE)
    sudo chmod 600 /swapfile
    

    읽기, 쓰기가 가능하도록 chmod 600으로 설정해준다.

  4. mkswap 명령어로 swapfile을 추가할 swap 공간을 생성한다

    # swap 공간 생성 (Make swap)
    sudo mkswap /swapfile
    

  5. swapon 명령어를 통해 swapfile을 swap memory에 추가한다.

    # swap 공간에 swapfile 추가하여 즉시 사용할 수 있도록
    sudo swapon /swapfile
    
  6. /etc/fstab에 세팅

    # /etc/fstab vi 에디터 열기
    sudo vi /etc/fstab
    
    # 파일의 맨 끝 다음줄에 아래 명령어 작성
    /swapfile swap swap defaults 0 0
    

    etc/fstab는 파일시스템 정보를 저장하는 곳!!

    파티션 변경 및 디스크 추가 시에는 이 파일에 등록해야 자동으로 마운트가 가능하다.

    따라서 /etc/fstab 파일에 swapfile을 세팅해주도록 하자

    궁금 하면 아래!!

    리눅스 파일시스템 (/etc/fstab)

  7. free 명령어로 ec2 메모리 상태를 확인하자.

    free -h
    

    swap 메모리가 이쁘게 할당 되어있다!!!!

  8. top 명령어로 메모리 이용률 확인하기!

    shift + p를 누르면 정렬 순서가 바뀐다 (많은 이용량 프로세스순)

    lxd 라는 프로세스(mysql이다.)가 렘을 38프로나 사용중이다…. 이러니 도커 돌리면 꺼지지…

    근데 지금은 스왑메모리를 할당했으니 도커컴포즈를 실행하고 다시 해보자!!

    일단 실행은 됐고…

    top 명령어로 한번 보자!!

    java가 15프로 먹고 mysql이 38프로 먹고있다…. 한번 vscode의 remote ssh로 접속 해보자

    미친 갑자기 node (remote ssh의 동작언어인가보다) 프로세스가 10퍼를 먹으면 swap메모리를 사용한다!!

    이제까지 remote ssh를 이용해 서버가 죽었던건 메모리 부족이었나 보다….

    나중에 보니 렘 30퍼나 먹는것을 확인했다…

    root 디렉토리를 remote ssh 로 열었더니 cpu를 75퍼 먹는다….
    스왑메모리 없었으면 바로 죽었을듯…

profile
소통과 기록이 무기(Weapon)인 개발자
post-custom-banner

0개의 댓글