sonarRunner java.lang.OutOfMemoryError:PermGen空间

时间:2013-08-28 23:16:45

标签: java error-handling sonarqube permgen sonar-runner

环境:
1. Linux
2. Gradle 1.6 / 7
3.语言 - Java

gradle clean build jacocoTestReport - 工作正常。

最近遵循SonarQube安装提供的文档: http://docs.sonarqube.org/display/SONAR/Running+SonarQube+as+a+Service+on+Linux (声纳开始,声纳状态,声纳停止等)...此命令将起作用。

更改了gradle构建脚本acc。到Gradle SonarRunner帮助页面: http://www.gradle.org/docs/current/userguide/sonar_runner_plugin.html

在运行sonarRunner任务时 - 我收到以下错误:

:sonarRunner
18:56:03.997 INFO  - Load batch settings
18:56:04.140 INFO  - User cache: /production/c123456/jenkins/.sonar/cache
18:56:04.146 INFO  - Install plugins
18:56:04.851 INFO  - Install JDBC driver
18:56:04.858 WARN  - H2 database should be used for evaluation purpose only
18:56:04.858 INFO  - Create JDBC datasource for jdbc:h2:tcp://devserver11.tr.company.com:9092/sonar
18:56:05.870 INFO  - Initializing Hibernate
:sonarRunner FAILED
java.lang.OutOfMemoryError: PermGen space
> Building-bash-3.2$

在/ production / c123456 /声纳安装的声纳,即 - sonar / conf / sonar.properties - 一切看起来都很正确 - sonar / conf / wrapper.properties - 包含JAVA opts的有效值,即

# Java Additional Parameters
wrapper.java.additional.1=-Djava.awt.headless=true
wrapper.java.additional.2=-XX:MaxPermSize=1024m
wrapper.java.additional.3=-XX:+HeapDumpOnOutOfMemoryError
wrapper.java.additional.4=-XX:+CMSClassUnloadingEnabled
wrapper.java.additional.5=-XX:+UseConcMarkSweepGC

# RECOMMENDED : uncomment if Java Virtual Machine is a JDK but not a JRE. To know which JVM you use, execute
# 'java -version'. JDK displays 'Server VM'.
wrapper.java.additional.4=-server

# Initial Java Heap Size (in MB)
wrapper.java.initmemory=512

# Maximum Java Heap Size (in MB)
wrapper.java.maxmemory=1024
  1. 有人可以帮我解决这个错误消息 - PermGen空间问题 注意:这是从一台Linux机器上发生的,所以我尝试在其他Linux上安装Sonar      机器,仍然有相同的错误信息。

  2. 我在我自己的本地Windows机器上安装了SonarQube / Runner,并指向build.gradle sonarRunner部分,使用主机url作为我的本地机器/主机url我的机器名称(fqdn)与端口(:9000)等相同对于jdbc h2 tcp方式。

    在运行“gradle clean build jacocoTestReport sonarRunner”时,它传递了上述错误,但又给了我一个奇怪的错误。 C:\ work是我检查项目的工作区:Project_A_Svc(服务项目 - Java源代码)。

    :sonarRunner失败

    失败:构建因异常而失败。

    • 出了什么问题: 任务':sonarRunner'执行失败。

        

      org.sonar.runner.RunnerException:'project_a_svc:project_a_svc'项目的文件夹'C:\ work \ Project_A_Svc \ src \ main \ java'不存在(基目录= C:\ work \ Project_A_Svc)

    • 尝试: 使用--stacktrace选项运行以获取堆栈跟踪。使用--info或--debug选项运行以获得更多日志输出。

    建立失败

    总时间:38.124秒

  3. 当我的源代码甚至没有该文件夹结构时,为什么Gradle 正在尝试查找“src / main / java”。 Gradle默认结构是使用“src / main / java”来获取java源代码,但是我的build.gradle确实有sourceSets部分,我已经提到了查找java源的位置。我已经尝试了多种方法来为src java / tests设置源Dirs,但它仍然试图寻找“src / main / java”。

    build.gradle snapshost

    apply plugin: 'java'
    apply plugin: 'sonar-runner'
    
       main {
          java {
             srcDir 'src/java'
          }
       }
       test {
          java {
             srcDir 'test/java'
          }
       }
       integrationTest {
          java {
             srcDir 'src/java-test'
          }
       }
    }
    

    build.gradle中的

    sonarRunner部分是:

    def sonarServerUrl = "devserver11.tr.company.com"
    sonarRunner {
       sonarProperties {
          property "sonar.host.url", "http://$sonarServerUrl:9000"
      // these are default settings for the in-memory database.  Change if using a persistent DB.
      property "sonar.jdbc.url", "jdbc:h2:tcp://$sonarServerUrl:9092/sonar"
      property "sonar.jdbc.driverClassName", "org.h2.Driver"
      property "sonar.jdbc.username", "sonar"
      property "sonar.jdbc.password", "sonar"
    
      //properties ["sonar.sources"] += sourceSets.main.java.srcDirs
      //properties ["sonar.tests"] += sourceSets.test.java.srcDirs
      //----
      properties["sonar.sources"] = "src/java"
      properties["sonar.tests"] = "test/java"
    
       }
    }
    

    有任何帮助吗?非常感谢。

2 个答案:

答案 0 :(得分:2)

我取得了一些进展。

<强>步骤

  1. 请勿在sonar / conf / sonar.properties,wrapper.properties,sonar-runner / conf / sonar-runner.properties中更改任何内容。确保sonar.properties和sonar-runner.properties中的主机url值相同。

  2. 转到工作区(安装源代码的位置)。

  3. sonar-runner (可执行文件) - 它将显示路径/文件 它给出了我需要 sonar-project.properties 的错误,因为我遗漏了一些需要的变量 通过声纳。

    使用link

  4. 找不到SCM提供程序。使用链接:http://jira.codehaus.org/browse/ACT-1714来解决此问题。

  5. 再次跑了声纳 - 跑者,它没事了。 (注意:此命令与运行sonarRunner不同,因为它是Gradle的声纳运行器任务)。

  6. 去SonarQube仪表板,现在有东西显示。

  7. 明天待命:

    1. 在Linux命令行和Jenkins(作业调用gradle任务)中进行以下操作。 gradle clean build jacocoTestReport sonarRunner
    2. <强>更新

      • 试着跑步:

      gradle clean build jacocoTestReport - 工作

      gradle clean build jacocoTestReport sonarRunner - 失败说src / main / java不存在

      gradle clean build jacocoTestReport sonarRunner -Dsonar.sources = src / java - WORKED

      gradle clean build jacocoTestReport sonarRunner -Dsonar.sources =“src / java,test / java,src / java-test” - DID NOT WORKED(PermGen java error)

      gradle clean build jacocoTestReport sonarRunner -Dsonar.sources =“src / java” - DID NOT WORKED(PermGen java error)

      gradle clean build jacocoTestReport sonarRunner -Dsonar.sources = src / java - DID NOT WORKED(PermGen java error)

      gradle sonarRunner -Dsonar.sources = src / java,test / java,src / java-test - DID NOT WORKED(错误是charset无法读取或导入 - charset UTF-8或者我最终设置为sonar.sourceEncoding)

      gradle clea build jacocoTestReport - WORKED

      ,然后

      gradle sonarRunner -Dsonar.sources =“src / java” - 工作

      我已经尝试将sonar / conf / wrapper.properties中的MaxPernGen设置为各种值,如128,512,1024,2048,......高达8000m ......无法解决以下错误 - 同时运行所有gradle一个命令中的任务。

      :sonarRunner FAILED
      
      FAILURE: Build failed with an exception.
      
      * What went wrong:
      Execution failed for task ':sonarRunner'.
      > java.lang.OutOfMemoryError: PermGen space
      
      * Try:
      Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.
      
      BUILD FAILED
      

      想知道为什么我跑的时候会收到这个错误:

      :gradle clean build jacocoTestReport sonarRunner“




      确定 - 让PermGen内存问题已解决。

      <强>步骤: 1.在我的〜/ .bashrc或〜/ .bash_profile中。我创建了以下变量

      GRADLE_OPTS=” -XX:MaxPermSize=512m"
      
      1. 运行“which gradle”或基本上找到使用哪个gradle文件(shell或.bat)。转到该路径并打开“gradle”/“gradle.bat”(对于Windows)文件。

      2. 进行以下更改。

        DEFAULT_JVM_OPTS="$JAVA_OPTS $GRADLE_OPTS"
        
      3. 执行“.~ / .bash_profile”或“.~ / .bashrc”.... - 或者打开一个新的putty会话。

      4. 确保PATH变量中包含gradle HOME / bin(Linux / Windows)

      5. 从工作区中运行以下命令(这次没有显示我之前得到的PermGen错误):

        gradle clean build jacocoTestReport sonarRunner

        :)今天早点回家的时间。

      6. 其他类似的变量是:服务器(putty会话级别)或IDE或Jenkins中的GRADLE_OPTS / JAVA_OPTS / SONAR_RUNNER_OPTS(其中-XX:Max ..值可以设置)。

      7. 感谢Allyn提示。

答案 1 :(得分:0)

如果你使用Gradle Wrapper,你可以在那里指定GRADLE_OPTS,这也适用于Jenkins。