개발일지

메모리 부족으로 인한 VSCode SSH 끊김 현상(OfflineError) 해결하기- Swap 메모리 본문

Infra, AWS, Linux

메모리 부족으로 인한 VSCode SSH 끊김 현상(OfflineError) 해결하기- Swap 메모리

lyjin 2025. 2. 22.

문제 상황

현재 vscode remote server를 사용해서 SSH 접속을 하고 있다. 종종 SSH 연결이 끊길 때가 있는데, 시간이 지나면 알아서 돌아오기도 하고 실제 인스턴스 자체에는 문제 없어 보였던 적이 많았다.
 
이 글을 작성하게 된 직접적인 원인은 SSH 접속해서 npm run start하기만 하면 OfflineError가 발생했다. 결론부터 말하자면 RAM 메모리 부족 때문에 나타나는 현상이었다.

 
이번 글에서는 OfflineError 원인을 찾기 위해 시도 했었던 과정들을 기록해보고자 한다.


원인 파악

1. 인스턴스 상태 확인

대시보드 또는 aws-cli 사용

$ aws ec2 describe-instance-status --instance-ids <INSTANCE_ID> --region ap-northeast-2

 
인스턴스 상태는 running으로 정상이었다.

 
 


2. CPU 사용량 확인

 
잠깐 오르긴 했지만 문제 생길 정도는 X..
그밖에 보안그룹이나 권한, IP 주소 등 가능성 있는 요소 전부 확인 해봤는데 설정 자체에는 문제 없었다.
 
 


3. 메모리 사용량 확인

메모리 용량 문제일 수도 있다고 해서 마지막으로 확인해봤다.

// 실시간 메모리 확인
$ watch -n 1 free -m 

// 실시간 리소스 확인
$ top -o %MEM

// 실행 중인 프로세스 중 메모리 사용량 TOP 10 확인
$ watch -n 1 "ps aux --sort=-%mem | head -10"

 
 
무려 메모리의 95% 이상을 사용 중이었다. 

 

  1. 현재 NestJS 실행 시 pm2 reload 사용 중
  2. reload 되는 과정에서 메모리 사용량 급증
  3. SSH 응답 지연 (+ OOM 발생 가능성 증가)

이런 이유로 연결이 끊긴게 아닐까 추정된다.
 

 

참고로 리눅스는 OOM(OutOfMemory)이 발생하면 메모리를 확보하기 위해 실행 중이던 프로세스 중 하나를 강제로 죽인다고 한다(OOM Killer). OOM Killer 여부는 각종 시스템 로그로 확인할 수 있다.

$ dmesg | grep -i 'oom'
$ journalctl -k | grep -i 'oom'
$ cat /var/log/syslog | grep -i 'oom' // 또는 kern.log

 
아무 내용도 뜨지 않는 걸 보아 OOM까지 가지는 않은 것 같다.
 


해결 - Swap 메모리 활성화 하기

전부 root 권한으로 실행해야 한다.

// 1. swap 파일 생성
$ fallocate -l 4G /swapfile

// 2. 보안 설정 (권한 변경)
$ chmod 600 /swapfile

// 3. swap 포맷팅 (리눅스가 해당 파일을 swap 영역으로 인식하도록)
$ mkswap /swapfile

// 4. swap 활성화
$ swapon /swapfile

// 5. 재부팅시에도 swap 유지되도록 설정
$ echo '/swapfile swap swap defaults 0 0' | tee -a /etc/fstab

 
 
이후 다시 reload 해봤을 때 끊김 없이 재실행 됐다! free -m 해보면 swap 메모리도 함께 사용 중이다.


아무래도 Swap은 디스크 기반이다보니 실제 RAM을 사용하는 것보단 느리고, 과도한 swap은 오히려 시스템 성능을 저해할 수 있다고 한다. 메모리 부하가 과도하다면 RAM 스펙 자체를 올리는 것이 나을 수 있다.
 
+) vscode remote server를 사용하게 되면 ssh 원격 접속하는 순간 해당 서버에 메모리가 할당된다고 하니 주의하자..
 
 
 
AWS 참고)

 

스왑 파일을 사용하여 Amazon EC2 인스턴스에서 메모리를 스왑 스페이스로 할당합니다.

Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스에서 스왑 파일로 사용할 메모리를 할당하고 싶습니다. 어떻게 해야 하나요?

repost.aws