4.3.4. 使用法
4.3.4.1. メモリーの要件
JVM はすべての Jenkins エージェントで使用され、Jenkins JNLP エージェントをホストし、Java アプリケーション (javac
、Maven または Gradle など) を実行します。Jenkins エージェントが使用する JVM のチューニングに関する参考情報は、Sizing OpenJDK on OpenShift Container Platform を参照してください。
メモリー効率のために、メモリー制限が 2GiB 未満のコンテナーで実行されている場合、デフォルトで Jenkins イメージは 32 ビット JVM を動的に使用します。この動作は、OPENSHIFT_JENKINS_JVM_ARCH
環境変数で上書きできます。JVM の選択は、デフォルトで JenkinsJNLP エージェントとエージェントコンテナー内の他の Java プロセスの両方に適用されます。
デフォルトで、Jenkins JNLP エージェントの JVM は、ヒープにコンテナーメモリー制限の 50% を使用します。この値は、CONTAINER_HEAP_PERCENT
の環境変数で変更可能です。また、上限を指定することも、すべて上書きすることも可能です。詳細は、Environment Variables を参照してください。
デフォルトでは、パイプラインから実行されるシェルスクリプトや oc
コマンドなど、Jenkins エージェントコンテナーで実行される他のすべてのプロセスでは、OOM kill を引き起こさずに、残りの 50% のメモリー制限を超えるメモリーを使用することはできません。
デフォルトでは、Jenkins エージェントコンテナーで実行される他の各 JVM プロセスは、最大でコンテナーメモリー制限の 25% をヒープに使用します。これは、多くのビルドワークロード用にチューニングする必要がある場合があります。詳細は、Sizing OpenJDK on OpenShift Container Platform を参照してください。
Jenkins エージェントコンテナーのメモリー要求や制限の指定に関する情報は、Jenkins ドキュメント を参照してください。
4.3.4.1.1. Gradle ビルド
OpenShift の Jenkins エージェントで Gradle ビルドをホストすると、Jenkins JNLP エージェントおよび Gradle JVM に加え、テストが指定されている場合に Gradle が 3 番目の JVM を起動してテストを実行するので、さらに複雑になります。
OpenShift での JVM のチューニングに関する参考情報は、Sizing OpenJDK on OpenShift Container Platform を参照してください。
以下の設定は、OpenShift でメモリーに制約がある Jenkins エージェントの Gradle ビルドを実行する場合の開始点として推奨されます。必要に応じて、後で設定を緩和することができます。
-
gradle.properties ファイルに
org.gradle.daemon=false
を追加して、有効期間の長い gradle デーモンが無効になっていることを確認します。 -
org.gradle.parallel=true
が gradle.properties ファイルに設定されておらず、--parallel
がコマンドライン引数として設定されていないことを確認して、並列ビルドの実行を無効にします。 -
java { options.fork = false }
を build.gradle ファイルに設定して、Java コンパイルがプロセス以外で実行されるのを防ぎます。 -
build.gradle ファイルで
test { maxParallelForks = 1 }
が設定されていることを確認して、複数の追加テストプロセスを無効にします。 - Sizing OpenJDK on OpenShift Container Platform に従い、GRADLE_OPTS, JAVA_OPTS または JAVA_TOOL_OPTIONS の環境変数で、gradle JVM メモリーパラメーターを上書きします。
-
build.gradle の maxHeapSize および jvmArgs 設定によって、または
-Dorg.gradle.jvmargs
コマンドライン引数を使用して、Gradle テスト JVM の最大ヒープサイズおよび JVM 引数を設定します。