코드/dev

jenkins memory error

미로처럼 2024. 7. 17. 16:11
728x90

재직중인 회사에서 개발 서버 배포중  아래와 같은 에러가 발생하였다. 

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

 

위에 러는 말그대로 메모리가 충분하지 않아 발생한다. 

 

해결책으로는 여러가지 방법이 있는걸로 화인되었다.

 

  • 시스템의 메모리 로드 줄이기 
  • 물리적 메모리 또는 SWAP 공간 늘리기
  • SWAP 백킹 저장소가 가득차 있는지 확인
  • 64비트 OS 64비트 Java 사용 
  • JAVA 힙 크기 줄이기 (-Xmx/ -Xms)
  • java 스레드 수 줄이기
  • java 스레드 스택 크기 줄이기 (-Xss)

다양한 방법이 있는데 나의 겨우   swap 공간을 확인후 할당하는 방향으로 해결하기로 했다. 

swap 이란?

스왑은 Linux 기반 운영 체제에서 가상 메모리로 작동하는 저장 장치(예: HHD, SSD, 가상 저장 장치)의 전용 공간이다. 시스템의 사용 가능한 메모리가 부족할 때 물리적 RAM(Random Access Memory)을 보충하는 데 사용된다. 스왑 공간을 통해 운영 체제는 덜 자주 사용되는 데이터를 RAM에서 스왑 영역으로 이동하여 더 중요하거나 자주 액세스하는 데이터를 위해 RAM의 공간을 확보할 수 있다. 

스왑 공간은 스왑 파티션 또는 스왑 파일의 형태일 수 있다. 스왑 파티션은 저장 장치의 전용 파티션인 반면 스왑 파일은 기존 파일 시스템 내의 파일이다. 둘 다 동일한 목적을 수행한다.

 

 

메모리 및 swap 메모리 확인

 

아래와 같이  dd 명령어로 파일 생성

dd if=/dev/zero of=/var/spool/swap/swapfile bs=1MiB count=2048

 * 해당 디렉토리가 없는 경우  직접 디렉토리 생성

 

번에 1MiB(1MB)씩 2048번 반복하여 null문자로 채워진 파일을 만든다. (1MB * 2048 = 2GB)

fallocate 명령어를 이용하여 대용량 파일 생성도 가능 하나 리눅스 버전에 따라 swapfile 인식 안될수 있어

dd 명령어와 /dev/zero 활용하여 swap 파일을 만드는 것을 권장한다.

 

퍼미션  변경

sudo chmod 600 /var/spool/swap/swapfile

swap 포맷 변환 및 swap 할당

sudo mkswap /var/spool/swap/swapfile
sudo swapon /var/spool/swap/swapfile

 

 

 

 

swap 파일 시스템 등록(필요한 경우)

vim /etc/fstab
UUID=09934798-af72-4741-b12f-aa84a5850aa1  /    ext4    defaults    1 1
/var/spool/swap/swapfile                none    swap    defaults    0 0

*swapon 명령어를 이용하면 시스템에 swap파일을 등록할 수 있지만, OS를 재부팅할 경우 다시 리셋이 됨.

swap파일 등록을 영구히 하기 위해서는, 리눅스 파일시스템 테이블에 등록하면 가능.
/etc/fstab 에는 swap파일 이외에 마운트폴더 영구 적용.

위의 코드의 맨아래줄과 같이 swap파일을 등록하면 끝.

 

 

 

 

 

 

최종 적용 결과

 

 

 

 

728x90