IT, 프로그래밍/Jenkins

Ubuntu 14.04 - Jenkins 연동 시 OOM 문제 해결

오리@ 2018. 9. 28. 13:13

젠킨스를 사용 중에 시스템이 자꾸 다운되는 문제가 발생했다. 


재부팅을 반복하던 중에, 톰캣과 같이 돌아가면서 생기는 문제로 확인했고


톰캣 서비스 종료 후에 돌리니 잘 돌아가는 것을 확인하였다.


하지만 젠킨스 배포시 톰캣 구동이 꼭 필요하므로 이 문제는 꼭 해결되어야 했다.


젠킨스와 톰캣이 동시에 돌아가면 급속도로 느려지고 입력이 아예 안되는 것을 보아, 어딘가 데드락에 걸렸거나 메모리 오버플로가 발생한 것으로 예상,


우선 젠킨스 로그 파일을 확인하였다.


1
2
3
4
# There is insufficient memory for the Java Runtime Environment to continue.
# Native memory allocation (mmap) failed to map 38223872 bytes for committing reserved memory.
# An error report file with more information is saved as:
 
cs


재부팅 할때마다 이런 로그가 남아있다..


이제부터 해결 시작


1. 젠킨스의 Heap 메모리 영역을 늘려주기


/etc/default/jenkins 파일을 문서 편집기로 열어서 JAVA_ARGS 라는 부분을 찾아준다. 그럼 주석처리 된  


1
#JAVA_ARGS="-Xmx256m" 
cs


이 부분이 있을텐데 이 부분을 주석 해제 해주고 충분한 양을 할당해 준다.


-Xmx 이 옵션은 젠킨스에게 할당해 줄 최대 메모리 공간을 의미한다.


-XX:MaxPermSize=512m


여기보면 MaxPermSize를 설정해 줄 수 있는 옵션이 있는데 이것은 동적으로 할당되는 자바 객체의 메타정보를 저장하는 공간의 크기를 설정해 주는 것이라고 한다.


 나의 경우는 


1
2
JAVA_ARGS="-Xmx1024m -XX:MaxPermSize=512m" Colored by Color Scripter
cs


이렇게 설정해 주었다.


그리고 systemctl restart jenkins 명령을 통해 젠킨스 재시작.


젠킨스와 톰캣 동시에 돌려보니 잘 돌아간다.


그러나 젠킨스가 준비되는 과정에서 꺼져버리는 현상이 생김.


다시 로그 파일을 확인해 보니 여전히 메모리가 부족하다는 로그가 찍힌다.


구글링 해 보니, swap space 로 인한 문제인 것 같아, 답변에서 제시한 대로 명령을 수행한 후에 깔끔하게 해결하였다.


1
2
3
4
sudo fallocate -l 1G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
cs

https://stackoverflow.com/questions/14762162/how-do-i-give-jenkins-more-heap-space-when-its-running-as-a-daemon-on-ubuntu


https://stackoverflow.com/questions/31041512/jenkins-build-throwing-an-out-of-memory-error