2019. 8. 27. 01:50ㆍCentOS 7/Jenkins
젠킨스를 이용하여 톰캣 또는 spring boot jar 앱을 실행시킬 때, 아래의 메시지를 출력하며 build fail이 될 때가 있습니다.
OpenJDK 64-Bit Server VM warning: INFO: os::commit_memory(0x00000000e0800000, 130023424, 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 130023424 bytes for committing reserved memory.
Cannot allocate memory, 바로 메모리 초과 문제입니다.
이를 해결하기 위한 방법으로 Jenkins 의 JVM 메모리를 늘려주는 방법도 있으나,
저사양 메모리를 쓰고 있는 저의 경우 ( 1GB 짜리 메모리를 쓰고 있습니다. ) 무작정 JVM메모리를 늘리는 것은 문제의 해결책으로 보기 어렵습니다.
리눅스 메모리가 많이 부족한 경우, swap 메모리를 추가하여 가상메모리로 이용하면 메모리 관련 문제를 해결할 수 있습니다.
1. 메모리 및 swap 메모리 확인
free 명령어를 통해 리눅스 OS 메모리를 확인할 수 있습니다.
free -h total used free shared buff/cache available Mem: 991M 793M 75M 14M 122M 50M
만일, 이 명령어를 호출 했을 때, Swap 메모리가 출력되지 않는다면 swap 가상메모리 설정이 되어있지 않다는 것이다.
2. swap파일 생성하기
dd 명령어를 이용하여 null문자로 채워진 대용량파일을 만듭니다.
swap파일은 보통, RAM 메모리의 1.5~2배정도로 설정하는 것을 권장합니다.
dd if=/dev/zero of=/var/spool/swap/swapfile bs=1MiB count=2048
한번에 1MiB(1MB)씩 2048번 반복하여 null문자로 채워진 파일을 만듭니다. (1MB * 2048 = 2GB)
현재 제가 사용하고 있는 클라우드는 1G의 RAM을 가지고 있기 때문에 swapfile을 2G로 설정하면 됩니다.
swap 메모리파일을 /var/spool/swap
디렉토리 아래에 swapfile
라는 이름의 2G용량의 대용량 파일을 생성했습니다.
fallocate 명령어를 이용하여 대용량 파일을 생성할수도 있으나, Linux버전에 따라 간혹 swapfile로 이식이 안될때가 있습니다. 따라서 dd 명령어와
/dev/zero
를 활용하여 swap파일을 만드는 것을 권장합니다.
sudo chmod 600 /var/spool/swap/swapfile
swapfile 퍼미션을 rw-------(600)
으로 변경합니다.
sudo mkswap /var/spool/swap/swapfile
swap포맷으로 변환합니다.
sudo swapon /var/spool/swap/swapfile
이 swap파일을 시스템상에 등록합니다.
3. 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파일을 등록해줍니다.
4. swap파일 확인
free -h 명령어로 swap파일이 정상적으로 등록되었는지 확인해봅시다.
free -h total used free shared buff/cache available Mem: 991M 793M 75M 14M 122M 50M Swap: 2.0G 636M 1.4G
이제는 예전과 달리 Swap 파일도 출력됩니다.
4-2. swap파일 위치 확인
swapon --show NAME TYPE SIZE USED PRIO /var/spool/swap/swapfile file 2G 638.5M -2
swapon 명령어를 호출하면 등록된 swap파일 풀네임 및 크기, 사용량 등을 확인 할 수 있습니다.
++ 키워드
- Jenkins 'Cannot allocate memory' Error
- 젠킨스 빌드시 메모리 누수 문제
- os::commit_memory(0x00000000e0800000, 130023424, 0) failed; error='Cannot allocate memory' (errno=12)
- There is insufficient memory for the Java Runtime Environment to continue
- swapfile
- how to create swap partition in CentOS7
'CentOS 7 > Jenkins' 카테고리의 다른 글
[Jenkins] 4. Build 성공 후 앱 자동 배포하기 (0) | 2020.08.19 |
---|---|
[Jenkins] 3. GitHub hook을 이용한 Spring Boot 웹애플리케이션 빌드 자동화 (0) | 2020.07.14 |
[Jenkins] 2. Jenkins에 환경변수(Global Tool Configuration) 설정하기 (0) | 2020.07.13 |
[Jenkins] 1. CentOS 7 환경에 Jenkins 설치하기 (0) | 2020.07.13 |
Jenkins '역방향 프록시 설정이 잘못된 것으로 파악되었습니다.' 에러 해결 (0) | 2019.08.10 |