声纳 findbugs 堆大小
Posted
技术标签:
【中文标题】声纳 findbugs 堆大小【英文标题】:sonar findbugs heap size 【发布时间】:2012-04-23 16:04:27 【问题描述】:我是声纳新手。我正在使用声纳 pulgin 从 Jenkins 运行声纳。
当我从 jenkins 运行时,我在 findbugs 处出现内存不足异常
以下是错误:
Out of memory
Total memory: 1037M
free memory: 30M
Analyzed: D:\Victor\autocreated\webapp\WEB-INF\classes
Aux: C:\DOCUME~1\NADBHA~1\LOCALS~1\Temp\findbugs4165854405681394173.jar
Aux: C:\DOCUME~1\NADBHA~1\LOCALS~1\Temp\findbugs4688505485649811865.jar
Total time: 2:04:49.155s
Final Memory: 358M/989M
Exception in thread "main" org.sonar.batch.bootstrapper.BootstrapException: org.sonar.api.utils.SonarException: Can not execute Findbugs
at org.sonar.runner.Runner.delegateExecution(Runner.java:189)
at org.sonar.runner.Runner.execute(Runner.java:78)
at org.sonar.runner.Main.main(Main.java:61)
Caused by: org.sonar.api.utils.SonarException: Can not execute Findbugs
at org.sonar.plugins.findbugs.FindbugsExecutor.execute(FindbugsExecutor.java:120)
at org.sonar.plugins.findbugs.FindbugsSensor.analyse(FindbugsSensor.java:58)
at org.sonar.batch.phases.SensorsExecutor.execute(SensorsExecutor.java:64)
at org.sonar.batch.phases.Phases.execute(Phases.java:93)
at org.sonar.batch.bootstrap.ProjectModule.doStart(ProjectModule.java:143)
at org.sonar.batch.bootstrap.Module.start(Module.java:83)
at org.sonar.batch.bootstrap.BatchModule.analyze(BatchModule.java:111)
at org.sonar.batch.bootstrap.BatchModule.doStart(BatchModule.java:101)
at org.sonar.batch.bootstrap.Module.start(Module.java:83)
at org.sonar.batch.bootstrap.BootstrapModule.doStart(BootstrapModule.java:102)
at org.sonar.batch.bootstrap.Module.start(Module.java:83)
at org.sonar.batch.Batch.execute(Batch.java:100)
at org.sonar.runner.Launcher.executeBatch(Launcher.java:65)
at org.sonar.runner.Launcher.execute(Launcher.java:58)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.sonar.runner.Runner.delegateExecution(Runner.java:186)
... 2 more
Caused by: java.util.concurrent.ExecutionException: java.lang.OutOfMemoryError: Java heap space
at java.util.concurrent.FutureTask$Sync.innerGet(Unknown Source)
at java.util.concurrent.FutureTask.get(Unknown Source)
at org.sonar.plugins.findbugs.FindbugsExecutor.execute(FindbugsExecutor.java:112)
... 20 more
Caused by: java.lang.OutOfMemoryError: Java heap space
我的声纳版本是 2.13
当我将 Jenkins 声纳插件中的 jvm 选项增加到 1280 时,它显示如下错误:
Error occurred during initialization of VM
Could not reserve enough space for object heap
Error: Could not create the Java Virtual Machine.
Error: A fatal exception has occurred. Program will exit`enter code here`
【问题讨论】:
你的机器有多少内存? 1280似乎超过了可用的1037M 你能把你设置的JVM选项贴出来吗? 【参考方案1】:是的,如果分析的代码库很大,声纳 findbugs 执行程序可以使用大量 RAM。
您不仅要增加 JVM 可用的堆大小,还要增加“MaxPermSize”和“ReservedCodeCacheSize”(至少对于 Java Hotspot VM)。必须在实际执行 FindBugs 声纳执行器的 JVM 上设置 JVM 选项。所以可能不是 Jenkins 虚拟机,而是 Jenkins 为这项工作启动的虚拟机。
以下是 64 位系统的示例:
-Xmx3062m -XX:MaxPermSize=512m -XX:ReservedCodeCacheSize=128m
在我假设您正在使用的 32 位系统上,您会选择较低的值,例如:
-Xmx1536m -XX:MaxPermSize=384m -XX:ReservedCodeCacheSize=128m
另外,如果 Jenkins 不接受 JVM 选项,您可以尝试使用 Jenkins 的 sonar ant 任务运行声纳。 (这就是我正在做的,我可以设置尽可能多的内存。)
【讨论】:
通过 Jenkins 的 MAVEN_OPTS 尝试了所有这些设置,但不幸的是没有成功:( 有人解决了这个问题吗?我还通过 gitlab-cli.yml 文件中的 MAVEN_OPTS 尝试了所有波纹管设置。以上是关于声纳 findbugs 堆大小的主要内容,如果未能解决你的问题,请参考以下文章
如何从 Sonar 导出 FindBugs/PMD/Checkstyle 规则并导入 Netbeans