본문 바로가기
DevOps/AWS

AWS EC2 -bash: fork: Cannot allocate memory

by 어렵다어려웡 2021. 4. 24.

며칠 전에 Amazon Linux2 를 이용해서 Spring Boot가 아닌 Spring, 즉 WAR파일을 배포할 떄

경로를 설정하는 포스팅을 한 적이 있다.

 

거기서 미리 설정하지 않으면 나타나는 에러가 바로 "-bash: fork: Cannot allocate memory" 이 에러입니다.

 

저한테 이 에러가 발생했던 상황은 이렇습니다.

1. 스왑(SWAP) 파티션 설정을 하지 않고 경로를 설정한 후 서버를 가동시켰다.

2. 내가 배포한 프로젝트 경로로 웹을 실행시켰다.

3. 이후 웹은 무한로딩에 걸리면서 EC2 서버가 마비된다.

4. EC2 서버를 껏다켜도 몇분동안 멈춰있는다..

 

이러한 과정을 몇번 거쳐버려서 시간을 좀 소비했던 상태인데

해결방법은 SWAP 공간을 만드는 것이였습니다.

 

우선 사진을 통해서 해결방법 순서부터 말씀을 드리겠습니다.

1. /var/spool/swap/swapfile -> 해당경로에 "swapfile" 이라는 이름으로 파일을 생성해둔다.

2. "dd if=/dev/zero of=/var/spoll/swap/swapfile count=20480000 bs=1024" 해당 명령어를 입력한다. (2G 메모리 할당)

3. "sudo chmod 600 /var/spool/swap/swapfile" 명령어로 권한을 설정해준다.

4. 아래 두개의 명령어로 파일 포맷을 SWAP으로 변환하고 SWAP file로 등록해준다.

$ mkswap /var/spool/swap/swapfile

$ swapon /var/spool/swap/swapfile

(이 떄 저처럼 Operation not permitted가 나온다면 맨 앞에 sudo 를 붙여서 관리자권한으로 명령어를 입력)

 

5. "vim /etc/fstab" 명령어를 통해서 파일시스템테이블에 등록한다 

" /var/spool/swap/swapfile none sap defaults 0  0" 입력 후 저장

 

6. free -h 를 통해서 확인

기존에 없던 "SWAP" 이라는 이름으로 메모리공간이 생성된것이 보입니다.

 

저 같은 경우 chmod 명령어를 제외하고 기본적인 리눅스 명령어를 알고 있어서 조금 수월하게 했지만

리눅스 명령어에 대해 좀 서툰 사람이라면 어려운 부분이 있을 것입니다.

 

특히 5번의 경우 vim 명령어를 사용하는데 저번에 리눅스 명령어를 공부하면서 알고있는 정보로는

vim, nano 명령어가 둘다 파일 편집기능을 하는데 vim은 숙련자전용, nano는 초보자전용으로 추천을 해주셨습니다.

따라서 저는 nano 명령어를 통해서 파일시스템테이블에 등록을 했습니다.

권한이 없다는 에러가 나온다면 chmod 명령어를 통해서 바꾸신 후에 편집하시면 되겠습니다.