ERROR!!!!!!!

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

voider 2021. 1. 29. 18:32

문제

EC2(Amazon Linux2 AMI)서버에서 springboot gradle프로젝트를 ./gradlew test로 테스트하려고 하니 메모리가 충분하지 않다는 에러가 발생헀다.

* What went wrong:
Unable to start the daemon process.
This problem might be caused by incorrect configuration of the daemon.
For example, an unrecognized jvm option is used.
Please refer to the User Manual chapter on the daemon at https://docs.gradle.org/6.7/userguide/gradle_daemon.html
Process command line: /usr/lib/jvm/java-11-openjdk-11.0.7.10-4.amzn2.0.1.x86_64/bin/java --add-opens java.base/java.util=ALL-UNNAMED --add-opens java.base/java.lang=ALL-UNNAMED --add-opens java.base/java.lang.invoke=ALL-UNNAMED --add-opens java.prefs/java.util.prefs=ALL-UNNAMED -XX:MaxMetaspaceSize=256m -XX:+HeapDumpOnOutOfMemoryError -Xms256m -Xmx512m -Dfile.encoding=UTF-8 -Duser.country=KR -Duser.language=ko -Duser.variant -cp /home/ec2-user/.gradle/wrapper/dists/gradle-6.7-bin/efvqh8uyq79v2n7rcncuhu9sv/gradle-6.7/lib/gradle-launcher-6.7.jar org.gradle.launcher.daemon.bootstrap.GradleDaemon 6.7
Please read the following process output to find out more:
-----------------------
OpenJDK 64-Bit Server VM warning: INFO: os::commit_memory(0x00000000eaaa0000, 178978816, 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 178978816 bytes for committing reserved memory.
# An error report file with more information is saved as:
# /home/ec2-user/.gradle/daemon/6.7/hs_err_pid5777.log


* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.

* Get more help at https://help.gradle.org

그랬더니 이런 에러가 기다리고 있었다. EC2 서버의 메모리가 충분하지 않아서 나는 에러 같았다. RAM이 충분하지 않거나, SWAP이 부족해서 나는 결과 같았다.

$ free -h
       total        used        free      shared  buff/cache   available
Mem:           983M        737M        120M        432K        125M        113M
Swap:            0B          0B          0B

스왑 파일을 사용하여 Amazon EC2 인스턴스에서 스왑 공간으로 사용할 메모리를 할당하려면 어떻게 해야 합니까? 아마존에서 제공하는 문서를 통해서 swap에 메모리를 할당했다.

아래 표는 아마존에서 권장하는 스왑공간 계산 방법이다.

물리적 RAM의 양 권장 스왑 공간
RAM 2GB 이하 RAM 용량의 2배(최소 32MB)
RAM 2GB 초과, 32GB 미만 4GB + (RAM – 2GB)
RAM 32GB 이상 RAM 용량의 1배

내가 사용하는 서버의 RAM은 1GB다.

swap 메모리 할당

64MB * 16 = 1GB

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

swap 파일 읽기 / 쓰기 권한

$ sudo chmod 600 /swapfile

Linux swap 영역 설정

$ sudo mkswap /swapfile

swap 공간에 swap파일을 추가하여 즉시 사용할 수 있도록 설정

$ sudo swapon /swapfile

부팅 시 swap파일을 활성화하도록 설정

$ sudo vi /etc/fstab

vi편집기로 fstab을 열어서

/swapfile swap swap defaults 0 0

이 내용을 추가해주고 저장:wq하면 끝.

              total        used        free      shared  buff/cache   available
Mem:           983M        849M         68M          8K         65M         31M
Swap:          1.0G        631M        392M

swap공간에 할당한 메모리를 사용하여 이 에러 극복 성공.