코드/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