Jenkinsのジョブがメモリ不足になり、ビルドログにJava.lang.OutOfMemoryError
メッセージが表示されます。しかし、JenkinsをインストールするためにUbuntuパッケージマネージャー、aptitude
、またはapt-get
を使用しましたが、Jenkinsに割り当てられたヒープスペースの量を変更する場所はわかりません。
Jenkinsジョブの実行中に発生する可能性のあるOutOfMemoryError
メッセージには2つのタイプがあります。
Java.lang.OutOfMemoryError: Heap space
–これは、デーモンの起動時にJenkinsに割り当てられるヒープ領域の量を増やす必要があることを意味します。Java.lang.OutOfMemoryError: PermGen space
–これは、Javaオブジェクトメタデータを格納するために割り当てられた生成スペースの量を増やす必要があることを意味します。 -Xmx
パラメーターの値を増やしても、このエラーには影響しません。Ubuntu 12.04 LTSでは、Java_ARGS
の10行目の/etc/default/jenkins
設定のコメントを外します。
-Xmx
Javaパラメーターの値を増やします。これにより、メモリ割り当てプール(ガベージコレクションヒープ)の最大サイズが設定されます。XX:MaxPermSize=512m
を追加します(必要に応じて512
を別のものに置き換えます。永続世代ヒープには、ユーザークラスに関するメタ情報が保持されます。たとえば、この抽出は、Jenkinsの新規インストール後のデフォルトの/etc/default/jenkins
からのものです。
# arguments to pass to Java
#Java_ARGS="-Xmx256m"
これは、ヒープスペースを1 GBに設定した場合の外観です。
# arguments to pass to Java
JAVA_ARGS="-Xmx1048m"
ヒープサイズを大きくしすぎないように注意してください。割り当てると、オペレーティングシステムや他のプログラムで使用可能なメモリ量が減少し、過度のページング(RAMとディスクを交換すると、システムの速度が低下します)。
MaxPermSpace
も設定する場合は、パラメーター間にスペースを追加する必要があります)。
# arguments to pass to Java
JAVA_ARGS="-Xmx1048m -XX:MaxPermSize=512m"
変更を行った後、Jenkins WebインターフェイスからJenkinsを適切に再起動するか、Sudo /etc/init.d/jenkins restart
を使用してコマンドラインからすぐに強制的に再起動します。
次のサイトは、Java最大および永続的な生成ヒープサイズを理解するのに役立ちます。 http://www.freshblurbs.com/blog/2005/05/19/explaining-Java-lang- outofmemoryerror-permgen-space.html 。
CentOSの場合、Jenkins.xmlがデフォルトで配置されるディレクトリは、jenkins-1.579-1.1の場合は/ etc/sysconfig /です。
JENKINS_Java_OPTIONS="-Djava.awt.headless=true -Xmx -XX:MaxPermSize="
Ubuntu Serverを使用している場合は、まず Monitoring プラグインをインストールして、Jenkinsが使用しているメモリ量を確認します。たとえば、これはインストール後に見たものです。
次に、コマンドfree -m
を使用して、サーバーのメモリサイズを把握しました。私の場合、16Gb。その情報で、私は/etc/default/jenkins
を開き、変更しました:
Java_ARGS="-Djava.awt.headless=true"
に
Java_ARGS="-Xmx8384m -Djava.awt.headless=true"
8384は8Gbです。その後、コマンドSudo service jenkins restart
を使用してJenkinsを再起動し、メモリの問題が発生しているジョブをトリガーした後、状況は非常に良くなり、ジョブはこれ以降の実行で完了することができました。