[英]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
備注:
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堆空間
- 導航至哈德森工作,
- 點擊配置 ,
- 向下滾動到Build部分 ,然后
- 單擊高級按鈕。
- 將其輸入到MAVEN_OPTS:-Xmx512m -XX:MaxPermSize = 128m
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.