7

Sonar で大規模なプロジェクトを分析していて、次のエラーが発生します。

[sonar:sonar] 03:55:39.511 INFO  p.PhasesTimeProfiler - Execute decorators...

BUILD FAILED
[...]
[...] java.lang.OutOfMemoryError: Java heap space
at org.sonar.batch.index.MeasurePersister.model(MeasurePersister.java:127)
at org.sonar.batch.index.MeasurePersister.getMeasuresToSave(MeasurePersister.java:117)
at org.sonar.batch.index.MeasurePersister.dump(MeasurePersister.java:70)
at org.sonar.batch.index.DefaultPersistenceManager.dump(DefaultPersistenceManager.java:63)
at org.sonar.batch.phases.Phases.execute(Phases.java:95)
at org.sonar.batch.bootstrap.ProjectModule.doStart(ProjectModule.java:139)
at org.sonar.batch.bootstrap.Module.start(Module.java:83)
at org.sonar.batch.bootstrap.BatchModule.analyze(BatchModule.java:131)
at org.sonar.batch.bootstrap.BatchModule.doStart(BatchModule.java:121)
at org.sonar.batch.bootstrap.Module.start(Module.java:83)
at org.sonar.batch.bootstrap.BootstrapModule.doStart(BootstrapModule.java:121)
at org.sonar.batch.bootstrap.Module.start(Module.java:83)
at org.sonar.batch.Batch.execute(Batch.java:104)
at org.sonar.ant.Launcher.execute(Launcher.java:78)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:616)
at org.sonar.ant.SonarTask.delegateExecution(SonarTask.java:244)
at org.sonar.ant.SonarTask.execute(SonarTask.java:193)
at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:291)
at sun.reflect.GeneratedMethodAccessor4.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:616)
at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
at org.apache.tools.ant.Task.perform(Task.java:348)
at org.apache.tools.ant.Target.execute(Target.java:392)
at org.apache.tools.ant.Target.performTasks(Target.java:413)
at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1399)
at org.apache.tools.ant.helper.SingleCheckExecutor.executeTargets(SingleCheckExecutor.java:38)
at org.apache.tools.ant.Project.executeTargets(Project.java:1251)
at org.apache.tools.ant.taskdefs.Ant.execute(Ant.java:442)

実行中の Sonar サーバーまたは Sonar ジョブを実行する Ant ターゲットの Java ヒープ領域を増やす必要がありますか?

4

1 に答える 1

14

スタック トレースからわかるように、Ant は Sonar 分析を開始するため、Ant が実行される VM のヒープ領域を増やす必要があります。

これは非常によく似た質問です ところで:Sonar Javaヒープスペースを増やす方法

コマンドラインでAntを使う場合

他の質問に関するMark O'Connorの回答からの引用:

Sonar ANT タスクは ANT の一部として実行されるため、標準の ANT 環境パラメーターを使用して JVM ヒープを設定する必要があります。例えば:

ANT_OPTS=-Xmx256m をエクスポートします。

備考:

  • これは Linux 用です。Windows の場合は、次のsetコマンドを使用します。
  • これは厳密にヒープ領域用です。用Permgen、使用-XX:MaxPermSize=<desired amount>

これはさらに類似した質問です: Build Failed java.lang.OutOfMemoryError: Java heap space

Eclipse IDE の場合

記事からの引用http://soenkerohde.com/2008/06/change-eclipse-ant-settings-when-you-run-out-of-memory/

  • Eclipse でメニューを開く: Run -> External Tools -> Open External Tools Dialog
  • 左側で変更するビルド スクリプトを選択します
  • 右側のJREタブを選択します
  • VM 引数として次を設定します。 -Xms768m -Xmx1024m -XX:MaxPermSize=512m

IntelliJ アイデアの場合

このフォーラム スレッドは役に立ちます: ANT build Java heap space

回答からの引用:

正しい場所でヒープを増やしたことを確認してください。IDEA の Ant ツール ウィンドウで [プロパティ] ボタンをクリックし、[最大ヒープ サイズ (Mb)]フィールドを編集する必要があります。

また、IntelliJ Idea ページから:メモリ ヒープの増加

記事からの引用:

ビルド プロセスのメモリ ヒープは IntelliJ IDEA メモリ ヒープから独立しており、ビルド プロセスの完了後に解放されます。

メモリ ヒープを増やすには: [ビルド ファイルのプロパティ] ダイアログ ボックスを開きます。[最大ヒープ サイズ]フィールドに、必要なメモリ量を入力します。

Jenkins 継続的インテグレーションと Ant ビルドの場合

この質問は役に立ちます: How to use the Java Optionsin jenkins ant build tool to set ANT_OPTS

回答からの引用:

JAVA OPTIONS を -Xmx512m -XX:MaxPermSize=256m に設定し、ANT_OPTS= なしでのみ設定します。

Maven ビルドの場合、この記事が役に立ちます: hudson ビルドで maven ヒープスペースを増やす方法

  1. hudson ジョブに移動し、
  2. [構成] をクリックし、
  3. [ビルド] セクションまで下にスクロールし、
  4. [詳細] ボタンをクリックします。
  5. これをMAVEN_OPTS に入力します: -Xmx512m -XX:MaxPermSize=128m
于 2013-01-10T08:05:40.447 に答える