본문 바로가기
TIP

젠킨스 동시 빌드 건수 조정 Jenkins # of Executors

by ojava 2023. 10. 20.
반응형

Jenkins를 통해서 배치 프로그램들을 관리하고 있는데
하루에도 여러번씩 수행되는 배치가 많아지면서
동시 빌드가 자주 발생하는데 동시 빌드 가능 건수 기본값이 2로 설정되어 있어서 Pending 상태의 배치가 계속 대기 목록에 쌓이는 문제가 있었다.

물론 배치가 오래 걸리지 않으면 금새 빠져서 큰 문제가 안되지만 늘 문제가 발생하니 설정을 조정하게 된다 ^_ㅠ



최근에 젠킨스 오류인지 원인이 파악되지 않은 문제로 인해 배치 내용은 완료되었으나 젠킨스 자체에서 item의 결과값이 떨어지지 않아서 무한 대기하는 현상이 발생했다.

근데 그게 하필 동시 빌드 건수 2개에 물려서
나머지 배치가 모두 행이 걸린 배치로 인해 계속 대기상태로 추가되고 CPU가 계속 증가하는 문제가 있었음 ㅠㅠ



이로 인해 자주 수행되는 배치의 타임아웃 설정 추가 및 동시 빌드 건수를 조정해보기로 했다.





타임아웃 설정 (Terminate a build if it's stuck)

배치를 구성해둔 아이템 별로 구성 Configuration 에 들어가면 빌드 환경 Build Environment을 바꿀 수 있다.

Terminate a build if it's stuck이라는 설정이 있는데 이 값을 설정하면 빌드가 너무 오래 걸리는 경우 자동으로 빌드를 중단할 수 있다.
빌드 실행 시간에 따른 중단 설정을 하거나 특정 시간까지 돌고 있다면 중단 하는 등 원하는 형태로 설정할 수 있다.


Time-out strategy

원하는 시간 내에 종료되지 않으면 강제 중단하도록
Absolute 전략으로 선택하였고 Timeout minutes는 반복수행을 설정한 시간으로 진행하면 된다.

Build periodically를 H/2 7-23 * * * 형태로 2분마다 도는 배치로 설정했다면 타임아웃을 2분으로 두면 다음 실행 전까지 완료되지 않았을 때 강제 중단 시켜버린다.

특정 시간까지 수행 중일 때 중단하거나
최근 빌드 평균 시간을 이용하는 등의 설정은 각 배치 특성에 맞춰서 설정하시면 될 듯


Time-out actions

Time-out actions을 통해 중단을 어떤식으로 처리할 지도 결정할 수 있다. 기본적으로 특별하게 설정할 사유가 없다면 빌드 중단을 의미하는 Abort the build를 선택하도록 하자.

그 외에는 Fail the build, Writing the build description 등의 설정이 있는데 나는 Abort the build와 Writing the build description를 둘 다 설정해서 시스템 설정으로 인해 중단되었음을 같이 기록하도록 했다.


https://plugins.jenkins.io/build-timeout/

Build Timeout

This plugin allows you to automatically terminate a build if it's taking too long.

plugins.jenkins.io



동시 빌드 개수 설정 (# of executors)


젠킨스 관리 > 시스템 설정 > Maven Project Configuration에서 확인할 수 있는 해당 설정은 동시에 빌드되는 건수를 조정할 수 있다.

기본값은 2로 설정되어 있으나
젠킨스가 설치된 서버의 하드웨어에 따라 조정이 가능하다.

설정 변경을 위해 구글링 하다가 참고한 사이트에서는 전체 코어수보다 적게 설정하면 된다고 하는데 코어수를 확인하는 명령어는 아래와 같다.
(리눅스 기준)

lscpu

해당 명령어를 통해 cpu 관련 설정을 한 눈에 볼 수 있는데
CPU(s) 라고 써져있는 부분이 전체 코어수에 해당된다.

계산 방식을 알고싶어서 찾아보니
socket 개수 * core(s) of socket 개수 * thread(s) of core를 곱하면 가상 CPU 개수를 확인할 수 있다.
물리적인 개수는 소켓수와 소켓 당 코어수만 곱하면 됨



좀 더 간단하게 볼 수 있는 명령어는 다음과 같다.

nproc

해당 명령어를 통해 사용할 수 있는 프로세스 개수를 확인할 수 있다.


grep processor /proc/cpuinfo | wc -l

cpu 정보 목록을 상세하게 확인할 수 있는
/proc/cpuinfo 파일을 통해서 processor만 세어도 동일한 결과가 나왔다.

위 명령어들을 이용해서 CPU 정보를 확인한 뒤
가용 프로세스가 어느정도인지 파악하고 동시 빌드 개수를 조정하는 것이 좋다.

나는 40이 나왔지만 2에서 40으로 늘릴 정도는 아니라
5로 우선 늘리고 늘린 뒤에도 빌드 대기 건수가 있는지와 젠킨스 부하 정도를 확인하고 10 정도로 추가로 늘릴 예정이다.



젠킨스 부하통계

추가로 젠킨스 자체적으로 제공하는 부하통계 기능을 이용하면 시간대별로 어느정도의 부하가 있는지를 알 수 있다.

배치를 위해 젠킨스를 사용한다면 부하정도가 크지 않을 것으로 생각되나 동시 빌드 개수를 조정하기 전에 꼭 부하 정도를 확인하고 조정하시길 바란다.






참고 사이트

젠킨스 환경 설정 - lesstif.com https://www.lesstif.com/continuous-integration/%ED%99%98%EA%B2%BD-%EC%84%A4%EC%A0%95-31850999.html

환경 설정

www.lesstif.com


cpu 설정 확인
https://brownbears.tistory.com/334

[Linux] CPU 개수 확인하기

일반적인 경우, 하이퍼스레딩에 의해 OS(윈도우, 리눅스 등)에서 코어 수가 실제 코어 수의 2배로 인식됨.예를 들어 싱글코어는 코어 2개로, 듀얼코어는 4개로 인식CPU 코어 전체 개수# grep -c processo

brownbears.tistory.com


반응형