정보

[AWS] EC2 인스턴스 메모리 초과 문제

Gyoogle 2021. 9. 17. 16:12
728x90
반응형

Error명 : OpenJDK 64-Bit Server VM warning: INFO: os::commit_memory(0x00000000eaaa0000, 178978816, 0) failed; error='Not enough space' (errno=12)

 

EC2 인스턴스에서 스프링 부트 gradle 프로젝트를 clone 후, /gradlew test를 진행했을 때 에러가 발생할 수 있다.

OpenJDK 64-Bit Server VM warning: INFO: os::commit_memory(0x00007f4eb92b0000, 262144, 0) failed; error='Not enough space' (errno=12)
#
# There is insufficient memory for the Java Runtime Environment to continue.
# Native memory allocation (mmap) failed to map 262144 bytes for committing reserved memory.

 

해당 에러는 테스트 과정에서 EC2 인스턴스의 메모리를 초과하기 때문에 발생한 것이다.

이는 아마존 EC2 인스턴스의 SWAP 공간을 활용하여 해결할 수 있다.

 

free -h를 통해 Mem과 Swap의 현재 저장 공간을 확인할 수 있다.

              total        used        free      shared  buff/cache   available
Mem:           983M        348M        368M        400K        266M        499M
Swap:             0B          0B          0B

Swap에서 RAM 1기가를 사용할 수 있도록 설정한다.

64MB * 16 = 1GB

 

bash에서 아래 명령어를 순서대로 실행시킨다.

 

Swap 메모리 할당

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

 

Swap 파일 권한 설정 (읽기, 쓰기)

$ sudo chmod 600 /swapfile

 

Linux Swap 영역 설정

$ sudo mkswap /swapfile

 

Swap 영역에서 swapfile 사용 설정

$ sudo swapon /swapfile

 

부팅 시 swapfile 활성화

$ sudo vi /etc/fstab

vi 창이 열리면, insert모드를 통해 아래 다음과 같이 추가시킨 후 :wq로 저장 후 나온다.

/swapfile swap swap defaults 0 0



다시 free -h를 해보자

              total        used        free      shared  buff/cache   available
Mem:           983M        348M        368M        400K        266M        499M
Swap:          1.0G          0B        1.0G

Swap에 메모리 공간이 할당되었다.

이제 다시 프로젝트 경로로 돌아가 /gradlew test를 진행하면 메모리 초과 문제가 해결된 것을 확인할 수 있다.

 

만약, gradlew 실행 권한이 없는 Permission denied가 나온다면?

$ chmod +x ./gradlew

실행 권한을 추가한 뒤 진행하면 된다.



[참고 자료]

728x90
반응형