[AWS][트러블슈팅] EC2 CPU100% 문제 해결

2025. 6. 4. 10:47·AWS

현재 프리티어를 사용해서 프로젝트를 진행중인데, EC2에서 자꾸 CPU 100%를 찍는 문제가 발생했었다.

CPU야 미안해..

이렇게 되면 서비스가 아예 죽거나, 상태검사에서 통과하지 못해 ssh 접속이 아예 안된다는 문제가 있었다.

문제를 해결하려 방법을 찾아보던중, SWAP 메모리를 추가해 메모리 공간을 추가해줄 수 있다는 블로그 글을 발견했다.

 

1. Swap 메모리?

Swap 메모리는 리눅스 시스템에서 물리적 메모리(RAM)가 부족할 때를 대비한 가상 메모리 공간이다.

 

따라서 RAM이 부족할 때 디스크에 데이터를 임시 저장하여, 시스템이 계속 동작할 수 있도록 도와주는 보조 메모리 공간이라고 할 수 있다.

 

스왑의 동작 원리는 다음과 같다.

  1. 사용 중인 RAM이 가득 차면,
  2. 리눅스 커널은 덜 자주 쓰이는 메모리 페이지를 디스크에 있는 스왑 영역으로 이동시켜,
  3. RAM 공간을 확보합니다.
  4. 다시 필요해지면 해당 데이터를 RAM으로 불러옵니다.

스왑 메모리공간을 사용하는 두 가지 방법이 있는데, 아래 실습은 '스왑 파일 형식'을 통해 스왑 메모리를 구현한다.

  • 스왑 파티션: 디스크의 일부 파티션을 스왑 전용으로 사용
  • 스왑 파일: 일반 파일 형태로 생성하여 스왑 공간처럼 사용 (현재 실습하는 방식)

 

하지만, 디스크는 RAM보다 훨씬 느리기 때문에, 스왑이 과도하게 사용되면 시스템이 심하게 느려질 수 있다. (이를 "스와핑 현상"이라고도 함)

 

따라서 고성능이 중요한 서버에서는 Swap 사용을 최소화하거나 비활성화하는 경우도 있으므로, 사용하는 서비스에 따라 판단하는게 좋다.

 

2. EC2 + Swap 실습

 

 

 

가장 먼저, 스왑 공간으로 사용할 스왑 파일을 생성해야한다.

 

일반적으로 RAM 용량의 1.5~2배 정도의 스왑 파일 크기가 권장되는데,

현재 free 명령어를 통해 확인한 RAM 공간은 약 1GB이므로 2GB의 스왑메모리 공간을 잡는다.

# 현재 메모리 공간 상태 확인
free

# 2GB의 스왑 파일 생성
dd if=/dev/zero of=/root/swapfile bs=1k count=2000000 conv=excl

현재 free 한 메모리 공간이 0.17GB 밖에 안된다... 이러니까 계속 CPU가 꽉끼지;;

 

생성한 스왑 파일의 권한을 부여해준다.

스왑 파일은 소유자만 읽기/쓰기가 가능해야하므로, 반드시 600 권한이여야 안전하다.

chmod 600 /root/swapfile


해당 파일을 스왑 영역으로 지정한다.

mkswap /root/swapfile

 

리눅스 시스템은 부팅 시, /etc/fstab 파일을 참조해서 마운트할 디스크/파티션/스왑 영역 등을 자동으로 설정한다.

따라서 /etc/fstab 공간에 스왑파일에 대한 내용을 추가해주어야, 시스템이 재부팅 되어도 스왑 공간을 계속 사용할 수 있다.

 

다음은 "/root/swapfile swap swap auto 0 0" 내용을 작성하는 2가지 방법으로, 둘 중 아무거나 해도 된다.

# 1. nano 이용
nano /etc/fstab

# 파일의 맨 아래에 다음 내용 추가
/root/swapfile swap swap auto 0 0

# 내용 작성 후 저장
Ctrl + O, Enter, Ctrl + X

 

# 2. echo 로 작성하기
echo '/root/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab


정상적으로 스왑 공간에 대한 설정이 마무리 되었다면, 인스턴스 재부팅 후에 메모리를 확인해봤을 때 

 

다음과 같이 늘어난 메모리 공간을 볼 수 있다.

 

AWS는 재밌다..

'AWS' 카테고리의 다른 글

[AWS][트러블슈팅] ALB의 Internet-facing vs Internal  (0) 2025.06.26
Artillery 부하테스트  (0) 2025.06.21
[AWS]기존 EC2로 AMI 이미지 만들고, AutoScaling 그룹에 ELB 연결하기  (0) 2025.05.21
[AWS] 로드밸런서 유형과 구성요소  (0) 2025.05.19
[AWS]Spring boot 프로젝트 EC2로 배포하기  (2) 2025.05.16
'AWS' 카테고리의 다른 글
  • [AWS][트러블슈팅] ALB의 Internet-facing vs Internal
  • Artillery 부하테스트
  • [AWS]기존 EC2로 AMI 이미지 만들고, AutoScaling 그룹에 ELB 연결하기
  • [AWS] 로드밸런서 유형과 구성요소
공부하는 나무꾼
공부하는 나무꾼
  • 공부하는 나무꾼
    헤맨 만큼 내 땅이다
    공부하는 나무꾼
  • 전체
    오늘
    어제
  • 글쓰기/관리
    • 분류 전체보기
      • AWS
      • SAA-C03
      • 네트워크 보안
      • 최신정보보안이론
      • 컴퓨터네트워크
      • OpenFaaS
      • C++
      • Java
      • HTML, CSS
      • 자료구조
      • 알고리즘
      • 정보보안인재양성
      • [MAC]트러블슈팅&Tip
      • 공부
      • Web(Django)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    등록번호
    Web Server
    java #자바 #객체지향프로그래밍 #복습
    웹클라이언트
    웹서버
    클라우드
    자격증
    aws-c03
    web application server
    웹애플리케이션서버
    SAA-C03
    AWS
    WAS
    cloud
  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.3
공부하는 나무꾼
[AWS][트러블슈팅] EC2 CPU100% 문제 해결
상단으로

티스토리툴바