gpt4 book ai didi

java - SonarQube - 奇怪的 OutOfMemoryError : PermGen space

转载 作者:行者123 更新时间:2023-11-29 04:49:29 24 4
gpt4 key购买 nike

我知道这里有类似的问题,但似乎都没有提供解决方案,所以我希望我的设置有所不同,以便至少针对这个特定问题可能有解决方案:

由于某些原因,我们目前坚持使用 SonarQube 4.5.6,试图分析一个巨大的 Java 项目(12.000 个文件和大约 1.000.000 行代码)。规则集由大约 700 条规则组成,分布在 java-plugin(最新版本 3.11)、findbugs(最新版本 3.3)、checkstyle(这里需要使用旧版本 - 2.2,因为某些规则在更高版本中不可用),和 pmd(最新版本 2.5)。

使用 Sonar Runner 2.4 的部分 java-plugin、findbugs(超时设置为大约 20 分钟)、checkstyle 运行,但在 pmd 中我不断收到 OutOfMemoryError: PermGen space

17:56:31.276 INFO  - Sensor PmdSensor...
17:56:31.279 INFO - Execute PMD 5.4.0...
17:56:31.313 INFO - Java version: 1.5
17:56:31.360 INFO - PMD configuration: C:\src\.\.sonar\pmd.xml
17:57:23.679 INFO - Execute PMD 5.4.0 done: 52400 ms
INFO: ------------------------------------------------------------------------
INFO: EXECUTION FAILURE
INFO: ------------------------------------------------------------------------
Total time: 57:33.538s
Final Memory: 47M/3908M
INFO: ------------------------------------------------------------------------
ERROR: Error during Sonar runner execution
org.sonar.runner.impl.RunnerException: Unable to execute Sonar
at org.sonar.runner.impl.BatchLauncher$1.delegateExecution(BatchLauncher.java:91)
at org.sonar.runner.impl.BatchLauncher$1.run(BatchLauncher.java:75)
at java.security.AccessController.doPrivileged(Native Method)
at org.sonar.runner.impl.BatchLauncher.doExecute(BatchLauncher.java:69)
at org.sonar.runner.impl.BatchLauncher.execute(BatchLauncher.java:50)
at org.sonar.runner.api.EmbeddedRunner.doExecute(EmbeddedRunner.java:102)
at org.sonar.runner.api.Runner.execute(Runner.java:100)
at org.sonar.runner.Main.executeTask(Main.java:70)
at org.sonar.runner.Main.execute(Main.java:59)
at org.sonar.runner.Main.main(Main.java:53)
Caused by: java.lang.OutOfMemoryError: PermGen space
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(Unknown Source)
at java.security.SecureClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.access$100(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at net.sourceforge.pmd.lang.java.typeresolution.PMDASMClassLoader.loadClass(PMDASMClassLoader.java:65)
at net.sourceforge.pmd.lang.java.typeresolution.ClassTypeResolver.populateType(ClassTypeResolver.java:655)
at net.sourceforge.pmd.lang.java.typeresolution.ClassTypeResolver.visit(ClassTypeResolver.java:179)
at net.sourceforge.pmd.lang.java.ast.ASTImportDeclaration.jjtAccept(ASTImportDeclaration.java:62)
at net.sourceforge.pmd.lang.java.ast.AbstractJavaNode.childrenAccept(AbstractJavaNode.java:55)
at net.sourceforge.pmd.lang.java.ast.JavaParserVisitorAdapter.visit(JavaParserVisitorAdapter.java:9)
at net.sourceforge.pmd.lang.java.ast.JavaParserVisitorAdapter.visit(JavaParserVisitorAdapter.java:136)
at net.sourceforge.pmd.lang.java.typeresolution.ClassTypeResolver.visit(ClassTypeResolver.java:170)
at net.sourceforge.pmd.lang.java.ast.ASTCompilationUnit.jjtAccept(ASTCompilationUnit.java:42)
at net.sourceforge.pmd.lang.java.typeresolution.TypeResolutionFacade.initializeWith(TypeResolutionFacade.java:17)
at net.sourceforge.pmd.lang.java.AbstractJavaHandler$5.start(AbstractJavaHandler.java:88)
at net.sourceforge.pmd.SourceCodeProcessor.usesTypeResolution(SourceCodeProcessor.java:127)
at net.sourceforge.pmd.SourceCodeProcessor.processSource(SourceCodeProcessor.java:142)
at net.sourceforge.pmd.SourceCodeProcessor.processSourceCode(SourceCodeProcessor.java:76)
at net.sourceforge.pmd.SourceCodeProcessor.processSourceCode(SourceCodeProcessor.java:43)
at org.sonar.plugins.pmd.PmdTemplate.process(PmdTemplate.java:82)
at org.sonar.plugins.pmd.PmdExecutor.executeRules(PmdExecutor.java:120)
at org.sonar.plugins.pmd.PmdExecutor.executePmd(PmdExecutor.java:90)
at org.sonar.plugins.pmd.PmdExecutor.execute(PmdExecutor.java:75)
at org.sonar.plugins.pmd.PmdSensor.analyse(PmdSensor.java:67)

堆栈跟踪显示我仍在 pmd 中,但 pmd 似乎已经通过分析(行 Execute PMD 5.4.0 done: ...),不应该是之后运行的另一个插件。不过,我想知道应该在哪里增加 PermGen 空间……我已经有了

wrapper.java.additional.2=-XX:MaxPermSize=8g
wrapper.java.maxmemory=8g

wrapper.conf 中也尝试添加

set JAVA_OPTS="-XX:PermSize=256m -XX:MaxPermSize=4096m"

sonar-runner.bat 中。此外还有

sonar.web.javaOpts=-server -Xmx4096m -XX:MaxPermSize=4096m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8 

sonar.properties 中。首先,我不明白是哪个设置导致了 OutOfMemoryError - wrapper.conf 中的设置? sonar-runner.bat 中的那个?还是 sonar.properties

8g 的 PermSize 没有帮助时,我该怎么办?默认大小是 128m 之类的,所以它已经是 64 倍了!?

知道如何用 SonarQube 分析这个项目吗?内置数据库和 MySQL 都会出现此问题,因此我认为这没有任何影响。

感谢任何帮助。谢谢...如果您需要有关配置的更多信息或想从某些日志中获取更多信息,请告诉我。

最佳答案

您不需要在服务器端分配额外的内存,而是在分析端分配给运行分析的进程。由于您似乎正在使用 SonarQube 扫描仪进行分析,我将引导您访问 Troubleshooting这些文档的一部分,它告诉您如何通过导出 SONAR_RUNNER_OPTS env var 来调整进程的内存设置。

关于java - SonarQube - 奇怪的 OutOfMemoryError : PermGen space,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35946738/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com