AWS EC2 OOM-killer 문제로 프로세스 강제 종료, swapfile 로 개선
Devops/AWS

AWS EC2 OOM-killer 문제로 프로세스 강제 종료, swapfile 로 개선

뉴비뉴 2024. 2. 19.

 안녕하세요.

 

프로젝트를 하다 보면 이유 모를 이유로 프로세스가 종료되는 경우가 종종 있습니다.

그 이유를 물론 쉽게 찾을 수도 있겠지만, 범위가 너무 광범위 합니다.

 

문제를 찾기 위해 로그를 먼저 확인해보겠습니다.

journalctl 란?

  • systemd의 서비스로 로그를 확인할 수 있습니다.
  • systemd-journald.service에 의해서 systemd의 정보들을 분석합니다.

옵션

  • -r: 최신항목이 먼저 표시되도록 역순으로 출력
  • -u: unit으로 systemctl list-units에서 출력되는 첫번 째 항목

ethereum geth code=killed, status=9/KILL

$ sudo journalctl -ru geth

 

journalctl 을 이용하여 이더리움 geth 로그를 보다가 이상한 점을 찾았습니다.

 

 

이더리움 블록을 가져오던 중에 code=killed, status=9/KILL 오류가 발생하면서

서버가 종료되고, 재부팅 하고나서 다시 블록이 생성되는 모습이 보였습니다.

 

그럼 "왜 이더리움 블록을 가져오다가 갑자기 geth 가 죽는거지?"

여기서 geth 란 이더리움 클라이언트 소프트웨어 입니다.

 

/var/log/syslog

 

journalctl 로그만으로는 정확한 이유를 찾을 수 없습니다.

 

/var/log/syslog 는 기본적으로 시스템에서 발생하는 로그를 가지고 있습니다.

 

 

여기서 oom-killer 를 확인할 수 있었습니다.

 

oom-killer: gfp_mask=0x140cca(GFP_HIGHUSER_MOVABLE|__GFP_COMP), order=0, oom_score_adj=0

 

해당 오류를 구글에 검색해서 찾아보니 해결방법을 찾았고,

"스왑 파티션을 확장하여 이 문제를 해결했다. (swapoff)" 라는 글을 찾았습니다.

 

https://askubuntu.com/questions/1446933/oom-keeps-killing-virtualbox/1449542#1449542

 

OOM keeps killing VirtualBox

For the past few weeks I've had a serious problem. The Out Of Memory killer of my Ubuntu host keeps killing my VirtualBox session (a Win10 instance). I've assigned only 3Gb to Win10 and there's 16G...

askubuntu.com

 

swapfile 란?

 

메모리가 부족할 때 디스크 일부분을 메모리에서 사용하는 방법 입니다.

루트 볼륨은 10G gp3 로 설정 했습니다.

 

$ sudo fallocate -l 3G /swapfile
$ sudo chmod 600 /swapfile
$ sudo mkswap /swapfile
$ sudo swapon /swapfile
$ echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
$ sudo sysctl vm.swappiness=10  # 활용 수준 조절
$ sudo sysctl vm.vfs_cache_pressure=50  # 물리적 메모리 사용도
$ sudo vi /etc/sysctl.conf
>>> vm.swappiness=10
>>> vm.vfs_cache_pressure=50

 

 

아래 사진을 보면 아시다시피 사용 가능한 공간이 5.0G 입니다.

 

 

"3G 를 메모리가 부족할 때 디스크의 일부분을 메모리로 사용"하라고 설정 했습니다.

 

Swap 3.0Gi

 

좋습니다. 오늘은 OOM-killer 와 swapfile 에 대해 알아 봤습니다.

게시글에 오타나 잘못 된 정보를 기입한 경우 댓글로 작성해주시면 감사합니다!

 

감사합니다.

참조

 

[Linux] journalctl 사용법

journalctl 이란? - systemd의 서비스 로그를 확인할 수 있다. - systemd-journald.service에 의해서 systemd의 정보들을 분석한다. 옵션 -a : 표시할 수 없는 문자가 있거나 매우 긴 경우에도 모든 Log 내용을 출력

sysops.tistory.com

 

OOM keeps killing VirtualBox

For the past few weeks I've had a serious problem. The Out Of Memory killer of my Ubuntu host keeps killing my VirtualBox session (a Win10 instance). I've assigned only 3Gb to Win10 and there's 16G...

askubuntu.com

다음 글

 

 

댓글

💲 추천 글