JVM Cannot allocate memory 에러

adam2·2020년 5월 4일
3

⚠️에러사전⚠️

목록 보기
4/4
post-thumbnail

스프링부트를 이용해서 어플리케이션을 개발하는 중...
잘만되던 build가 되지 않고

OpenJDK 64-Bit Server VM warning: INFO: os::commit_memory(0x00007f3a357c0000, 65536, 1) failed; error='메모리를 할당할 수 없습니다' (errno=12)

이렇게 갑자기 jvm쪽에서 oom이 발생한 듯한 에러가 나왔다.
리눅스... 한줄 치면 한줄 에러나오는 수준

원인

  • 시스템의 물리적 RAM 또는 스왑 공간이 부족.
  • 프로세스 크기 제한에 도달.

해결 방법

  • 시스템의 메모리 로드 줄이기.

  • 물리적 메모리 또는 스왑 공간 늘리기.

  • 스왑 백킹 저장소가 가득 차 있는지 확인.

  • 64 비트 OS에서 64 비트 Java 사용.

  • Java 힙 크기 줄이기 (-Xmx / -Xms).

  • Java 스레드 수 줄이기

  • Java 스레드 스택 크기 줄이기 (-Xss)

  • -XX:ReservedCodeCacheSize= 를 사용하여 더 큰 코드 캐시 설정

Swap 파티셔닝

별도로 스왑 공간을 생성하지 않았기 때문에 swap 공간을 만들어보도록 하겠다.

1. swap 공간 확인

스왑 공간을 확인하기 위해서

free -h


검색해보면 스왑 공간이 0B인것을 확인할 수 있었다.

대부분의 리눅스 배포판은 스왑(SWAP) 파티션 설정을 권장한다고 한다. 파티션 하나에 전체 운영 체제를 두고 사용해온 윈도우 사용자에게는 낯설수도 있다.

2. swap 파일 생성

$ touch /var/spool/swap/swapfile 
$ dd if=/dev/zero of=/var/spool/swap/swapfile count=2048000 bs=1024

swap 파일을 만들어주고 2G의 메모리를 할당해주었다.

chmod 600 /var/spool/swap/swapfile

그 다음 권한을 설정해준다.

$ mkswap /var/spool/swap/swapfile
$ swapon /var/spool/swap/swapfile

파일 포맷을 SWAP으로 변환하고 SWAP file로 등록해준다.

3. 파일시스템테이블에 등록

$ vim /etc/fstab

주석 아래와 같이 작성해주고 저장해준다.

4. swap 영역 확인

 free -h

다시 확인해보면 swap영역이 생긴 것을 알 수 있다!

다시 build를 해보니 이번엔 아까와 같은 에러 없이 잘 돌아갔다.
리눅스를 제대로 공부하지 않고 그때그때 필요한 명령들이나 에러에 대해서 공부하다 보니 항상 어려운 것 같다.ㅜㅜ


참고
https://bhsbhs235.github.io/jenkins/2019/12/29/jenkinserror.html

2개의 댓글

comment-user-thumbnail
2021년 4월 13일

너무 많은 도움이 됐습니다.

답글 달기
comment-user-thumbnail
2021년 12월 13일

안녕하세요! 언어별 빌드 시, 메모리 초과 에러관련 조사를 진행하고 있는중입니다.
혹시 설치한 package 목록이랑 소스코드를 볼 수 있을까요? ㅠㅠ
kimkyeongjun273@gmail.com
입니다!

답글 달기