4.3.4. 사용법
4.3.4.1. 메모리 요구 사항
JVM은 모든 Jenkins 에이전트에서 Jenkins JNLP 에이전트를 호스팅하고 Java 애플리케이션(예: javac
, Maven 또는 Gradle)을 실행하는 데 사용됩니다. Jenkins 에이전트에서 사용하는 JVM 튜닝 에 대한 배경 정보는 OpenShift Container Platform에서 OpenJDK 를 참조하십시오.
메모리 효율성을 위해 기본적으로 Jenkins 이미지는 2GiB의 메모리 제한이 있는 컨테이너에서 실행되는 경우 32비트 JVM을 동적으로 사용합니다. 이 동작은 OPENSHIFT_JENKINS_JVM_ARCH
환경 변수로 재정의할 수 있습니다. JVM 선택은 기본적으로 Jenkins JNLP 에이전트와 에이전트 컨테이너 내의 다른 모든 Java 프로세스에 적용됩니다.
기본적으로 Jenkins JNLP 에이전트 JVM은 힙에 대해 컨테이너 메모리 제한의 50%를 사용합니다. 이 값은 CONTAINER_HEAP_PERCENT
환경 변수를 통해 수정할 수 있습니다. 상한값으로 제한하거나 완전히 재정의할 수도 있습니다. 자세한 내용은 환경 변수 를 참조하십시오.
기본적으로 Jenkins 에이전트 컨테이너에서 실행되는 기타 모든 프로세스(예: 파이프라인에서 실행되는 쉘 스크립트 또는 oc
명령은 OOM 종료를 프록시하지 않고 남은 50%의 메모리 제한을 초과할 수 없음을 고려할 수 있습니다.
기본적으로 Jenkins 에이전트 컨테이너에서 실행되는 각 JVM 프로세스는 힙에 대해 컨테이너 메모리 제한의 최대 25%를 사용합니다. 많은 빌드 워크로드에 대해 이 값을 조정해야 할 수도 있습니다. 자세한 내용은 OpenShift Container Platform에서 OpenJDK 를 참조하십시오.
Jenkins 에이전트 컨테이너의 메모리 요청 및 제한에 대한 정보는 Jenkins 문서 를 참조하십시오.
4.3.4.1.1. gradle 빌드
OpenShift의 Jenkins 에이전트에서 Gradle 빌드를 호스트하면 Jenkins JNLP 에이전트 및 Gradle JVM 외에도 이러한 에이전트가 지정된 경우 테스트를 실행하는 세 번째 JVM이 생성되기 때문에 최소한 추가적인 문제가 발생하지 않습니다.
OpenShift에서 JVM 튜닝에 대한 배경 정보는 OpenShift Container Platform에서 OpenJDK 를 참조하십시오.
다음 설정은 OpenShift의 메모리가 제한된 Jenkins 에이전트에서 Gradle 빌드를 실행하기 위한 시작점으로 제안됩니다. 필요에 따라 설정을 완화할 수 있습니다.
-
org.gradle.daemon=false
를 gradle.properties 파일에 추가하여 수명이 긴 gradle 데몬을 비활성화했는지 확인합니다. -
org.gradle.parallel=true
가 gradle.properties 파일에 설정되지 않았으며--parallel
이 명령줄 인수로 설정되지 않았음을 확인하여 병렬 빌드 실행을 비활성화합니다. -
Java 컴파일이 프로세스 외부에서 실행되지 않도록 build.gradle 파일에서
java { options.fork = false }
를 설정합니다. -
build.gradle 파일에
test { maxParallelForks = 1 }
가 설정되어 있는지 확인하여 여러 추가 테스트 프로세스를 비활성화합니다. - GRADLE_OPTS, JAVA_OPTS 또는 JAVA_TOOL_OPTIONS 환경 변수가 있는 OpenShift Container Platform의 OpenJDK 설정에 따라 gradle JVM 메모리 매개변수를 재정의합니다.
-
maxHeapSize 및 jvmArgs 설정을 build.gradle에서 또는
-Dorg.gradle.jvmargs
명령줄 인수를 통해 Gradle 테스트 JVM에 대한 최대 힙 크기 및 JVM 인수를 설정합니다.