簡體   English   中英

Sonar分析給出了內存不足錯誤,我應該增加Ant或Sonar服務器的JVM堆空間嗎?

[英]Sonar analysis gives out of memory error, should I increase JVM heap space of Ant or Sonar server?

我正在分析聲納中的一個大型項目,並收到以下錯誤:

[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服務器的java堆空間,還是執行Sonar作業的Ant目標?

從堆棧跟蹤中可以看到,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>

這是一個更相似的問題: 生成失敗的java.lang.OutOfMemoryError:Java堆空間

對於Eclipse IDE

引用文章http://soenkerohde.com/2008/06/change-eclipse-ant-settings-when-you-run-out-of-memory/

  • 在Eclipse的打開菜單中: 運行 -> 外部工具 -> 打開外部工具對話框
  • 在左側選擇要更改的構建腳本
  • 選擇右側的“ JRE”選項卡
  • 將以下內容設置為VM參數 :-Xms768m -Xmx1024m -XX:MaxPermSize = 512m

對於IntelliJ Idea

這個論壇線程很有用: ANT構建Java堆空間

引用答案:

請確保您在正確的位置增加了堆。 您需要在IDEA的Ant工具窗口中單擊“屬性”按鈕,然后在此處編輯“最大堆大小(Mb)”字段。

另外,從IntelliJ Idea頁面: 增加內存堆

從文章引用:

生成過程的內存堆獨立於IntelliJ IDEA內存堆,並且在生成過程完成后釋放。

要增加內存堆:打開“ 構建文件屬性”對話框。 最大堆大小字段中,鍵入所需的內存量。

對於Jenkins持續集成和Ant構建

這個問題很有用: 如何在jenkins ant構建工具中使用Java Options來設置ANT_OPTS

引用答案:

僅在沒有ANT_OPTS =的情況下將JAVA OPTIONS設置為-Xmx512m -XX:MaxPermSize = 256m

對於Maven構建 ,本文非常有用: 如何在hudson構建中增加Maven堆空間

  1. 導航至哈德森工作,
  2. 點擊配置
  3. 向下滾動到Build部分 ,然后
  4. 單擊高級按鈕。
  5. 將其輸入到MAVEN_OPTS:-Xmx512m -XX:MaxPermSize = 128m

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM