IT 일기장

[Linux] OpenJDK 64-Bit Server VM warning INFO oscommit_memory(0x000000075c300000, 378011648, 0) failed error=메모리를 할당할 수 없습니다 (errno=12) 본문

프로그래밍 언어/Server

[Linux] OpenJDK 64-Bit Server VM warning INFO oscommit_memory(0x000000075c300000, 378011648, 0) failed error=메모리를 할당할 수 없습니다 (errno=12)

뽕슈 2023. 8. 8. 00:39
반응형
상황


테스트 서버에 배포하고 재기동을 시켰는데 다음과 같은 스크린샷이 확인됐다..

 

 

원인


원인과 해결책의 정석은 사실 메모리 누수가 되는 소스가 어디인지 찾고 그 소스를 수정해야되는 방법으로

가는게 맞는데, 고객과 기획자에게 당장 내일까지 보여줘야됐던 상황이였던지라 마음이 좀 급하여 임시방편(?)

방법으로 개선하였다.

 

원인은 역시나.. 메모리를 사용하는곳이 너무 많고 사용할 수 있는 메모리가 초과하여 생긴 오류다.

 

free -h

 

해결

해결은 swap을 이용했다. swap이란 실제 메모리가 가득 찼지만 더 많은 메모리가 필요할때 디스크 공간을 이용해서 부족한 메모리를 대체할 수 있는 공간을 의미한다. 가상 메모리 같은 개념인데 속도면에서는 하드디스크를 이용하는 것이라 메모리 속도면에서는 떨어지는 단점이 있다. (그래도 아예 없는건 좀 놀라웠다.) 그래서 swap 메모리 공간을 2GB 정도 확보하기 위해 root 계정으로 접근하여 swapfile을 만들려 했는데 이 역시도 없었다.. (진짜 서버 깡통만 설치해줬구나)

sudo touch /var/spool/swap/swapfile

 

없어도 상관은 없다. 해당 경로에 swap 폴더를 만들어주면 그만이다. 그래서 만들고 다시 한번 해봤다.

mkdir var/spool/swap

잘 만들어졌고 swap은 Red Hat 공식사이트에서 권장 용량이 있더라.. 추후에 도움이 될지도

설치된 RAM 용량 권장되는 스왑 용량 최대절전을 허용할때 권장되는 스왑용량
2GB or less RAM 용량의 2배 RAM 용량의 3배
> 2GB - 8GB RAM 용량 RAM 용량의 2배
> 8GB - 64GB 적어도 4GB ~ RAM 용량의 1 / 2 배 RAM 용량의 1.5배
> 64GB or more 적어도 4GB 최대절전이 권장되지 않음

아까 실패했던 명령어를 다시 입력하고, 2GB를 할당해주는 명령어를 입력했다. 그 다음 권한을 부여하고 swap을 만든다음 켜주는 일련의 과정을 거쳤다.

sudo dd if=/dev/zero of=/var/spool/swap/swapfile count=2048000 bs=1024
chmod 600 /var/spool/swap/swapfile
mkswap /var/spool/swap/swapfile
swapon /var/spool/swap/swapfile

 

그 다음 fstab 편집기 열어서 swap을 다음과 같이 추가해줘야한다.

vi /etc/fstab
# swap 추가
/var/spool/swap/swapfile	none	swap	defaults	0 0

그리고 다시 메모리를 확인해보면 swap에 2GB가 추가된 것을 확인할 수 있다. 재기동하면 정상적으로 실행은 됐으나, 메모리는 어디서 잡아먹는건지는 본인이 직접 찾아야된다. 다행히도 지금의 나는 찾았다.

 

반응형
Comments