11

Jenkins ビルド サーバーで Maven Java アプリを構築しています。Jenkins でのビルド中に何度も実行されますjava.lang.OutOfMemoryError: PermGen spaceが (ローカルホストでは決して実行されません)、ビルドに失敗します。

MAVEN_OPTS私はすでにJenkinsの設定を試みました:私はJenkins--> Manage Jenkins--> Configure system-->Global MAVEN_OPTSに入り、に設定されました-Xms512m -Xmx1024m -XX:MaxPermSize=512m -XX:PermSize=512m。この高い値に設定しているにもかかわらず、PermGen スペースの問題が発生し続けています。MAVEN_OPTS をより高い値に設定したくありません。私のアプリがどのように大量のスペースを必要とするのかわかりません。メモリ使用量が多い問題を深く掘り下げたいと思います。

最近、おそらく permgen スペースの問題は Maven 自体からではなく、Maven がスピンオフする JVM プロセスの 1 つ (例: プラグイン) にあるのではないかと考えています。この仮説を提案するのは、すでに permgen スペース エラー行を吐き出しているにもかかわらず、Maven が TestNG テストを正常に実行できるためです。PermGen エラーの原因となっているプラ​​グインの 1 つはJetty です。

Oct 31, 2012 7:55:37 AM com.google.apphosting.utils.jetty.JettyLogger warn
WARNING: handle failed
java.lang.OutOfMemoryError: PermGen space

したがって、私は知りたいです:

このMAVEN_OPTS変数は、Maven ビルドがスピンオフする子 JVM プロセスにも適用されますか? そうでない場合、Jetty などの子プロセスの JVM オプションを設定するにはどうすればよいですか?

注: Maven 3.0.4 を使用しています。

4

3 に答える 3

7

Java プロセスを生成するほとんどの Maven プラグインには、JVM コマンド ライン引数を指定する独自の方法があります。たとえば、argLine構成パラメーターを使用して、Surefire プラグインによって生成されたプロセスのヒープおよび permgen サイズを構成できます ( http://maven.apache.org/plugins/maven-surefire-plugin/test-mojo.html#argLineを参照)。

Jetty プラグインはプロセスを生成しないため、ヒープと permgen は Maven プロセスに提供される JVM 引数によって管理されます。

Jenkins から実行しているときにメモリが不足しているが、ローカルで実行しているときには不足していない場合は、Jenkins が Maven に渡す MAVEN_OPTS を確認してください。

于 2012-11-04T10:08:09.053 に答える
1

vm オプションをグローバルに構成 (設定) し、任意のビルド ジョブでオーバーライドできます。たとえば、Maven ベースのジョブでは、MAVEN_OPTS フィールドは「高度な」ブロックの 1 つに隠されています。

于 2012-10-31T15:39:00.777 に答える
1

前述の別の回答で述べたように、すべてのプロセスには引数を指定する独自の方法があります。Jenkins によって生成された Maven サブプロセスの場合、設定は Maven ビルドの下のジョブ構成になります。「詳細」ボタンをクリックして、MAVEN_OPTSフィールドでオプションを設定する必要があります。例:-XX:MaxPermSize=256m -Xms512m -Xmx1024m

于 2012-11-29T18:34:22.603 に答える