Jenkins 빌드 에러

Jenkins build error

Posted by Start Bootstrap on December 29, 2019 · 2 mins read

Jenkins 빌드 에러

AWS EC2에서 jenkins서버 구동시 다음과 같은 error를 보실수 있습니다.

OpenJDK 64-Bit Server VM warning: INFO: os::commit_memory(0x00000000eaaa0000, 178978816, 0) failed; error='Cannot allocate memory' (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:
# /var/lib/jenkins/.gradle/daemon/5.6.4/hs_err_pid2055.log

원인은 JVM 구동시 메모리가 부족하다는 것입니다.

이유는 두가지가 있습니다

  • 시스템의 물리적 RAM 또는 SWAP 공간의 부족

  • 프로세스 크기 제한에 도달

해결방법 :

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

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

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

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

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

  • Java 스레드 수 줄이기

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

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

EC2 인스턴스는 64bit ( $ getconf LONG_BIT ) JDK버전도 64bit이므로 아무 문제 없었고,

구글링으로 Java 힙 크기, 스레드 스택 크기 줄이기를 시도 해보았지만 오류 해결에는 도움이 되지 않았습니다.

또한 물리적 메모리는 늘릴수 없기 때문에, SWAP 공간 늘리는 방법을 시도해 보았습니다.

SWAP 공간이 없는 것을 확인하고

$ free -h

SWAP 파일을 생성합니다.

크기는 1.5 ~ 2배정도로 설정하는 것을 권장합니다.

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

시스템에서 접근 가능하도록 600 권한을 줍니다. 파일 소유권은 root:root(chown root:root)

$ chmod 600 /var/spool/swap/swapfile

파일 포맷을 SWAP으로 변환 후 SWAP file등록

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

파일시스템테이블(/etc/fstab)에 등록

$ vi /etc/fstab
#
# /etc/fstab
# Created by anaconda on Tue Jun 18 17:03:37 2019
#
# Accessible filesystems, by reference, are maintained under '/dev/disk/'.
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info.
#
# After editing this file, run 'systemctl daemon-reload' to update systemd
# units generated from this file.
#

#추가
/var/spool/swap/swapfile    none    swap    defaults    0 0

SWAP파일이 정상적으로 등록되었는지 확인합니다.

$ free -h

성공적으로 등록이 되었으며 빌드시 error없이 진행이 됩니다.