Jenkins - java.lang.OutOfMemoryError: PermGen 空间

5

环境:Linux/Windows7,Java 1.6.0.03/37或1.7。

我下载了jenkins.war,并在使用以下脚本/命令进行初始设置后,下载了一些插件(10-15个)并尝试重新启动Jenkins,它可以正常工作。然后,我又下载了一些更多的插件(共30-40个),无论是选择安装还是下载+安装,Jenkins都无法启动。

即使用startJenkins.sh(仅适用于Linux)。注意:在Windows7上,Jenkins作为Windows服务启动。

#!/bin/bash
export JAVA_HOME=/production/jenkinsAKS/java/jdk1.6.0_03
export JENKINS_HOME=/production/jenkinsAKS
export PATH=${JAVA_HOME}/bin:${PATH}
export JENKINS_HTTP_PORT=9040
export JENKINS_AJP13_PORT=9949
now=`date +%Y%m%d_%H%M%S`

echo  $0 begins ${now}
echo "   java-home=${JAVA_HOME}, jenkins-home=${JENKINS_HOME}, path=${PATH}"
java -jar ${JENKINS_HOME}/lib/jenkins.war -XX:MaxPermSize=4096m --logfile=${JENKINS_HOME}/log/jenkins.log${now} --httpPort=${JENKINS_HTTP_PORT} --ajp13Port=${JENKINS_AJP13_PORT} &

最初我没有使用"-XX:MaxPermSize=4096m"这个参数,但是当我看到以下错误信息时,我尝试了各种不同的值,比如128/512/1024,2048,4096m等等,但并没有解决这个错误。

INFO: Beginning extraction from war file
Jenkins home directory: /production/jenkinsAKS found at: EnvVars.masterEnvVars.get("JENKINS_HOME")
Aug 1, 2013 1:17:15 PM winstone.Logger logInternal
INFO: HTTP Listener started: port=9040
Aug 1, 2013 1:17:15 PM winstone.Logger logInternal
INFO: AJP13 Listener started: port=9949
Aug 1, 2013 1:17:15 PM winstone.Logger logInternal
INFO: Winstone Servlet Engine v0.9.10 running: controlPort=disabled
Aug 1, 2013 1:17:16 PM jenkins.InitReactorRunner$1 onAttained
INFO: Started initialization
Aug 1, 2013 1:17:16 PM jenkins.InitReactorRunner$1 onAttained
INFO: Listed all plugins
Aug 1, 2013 1:17:16 PM hudson.plugins.ansicolor.PluginImpl start
INFO: AnsiColor: eliminating boring output (https://github.com/dblock/jenkins-ansicolor-plugin)
Aug 1, 2013 1:17:16 PM org.jvnet.hudson.plugins.backup.BackupPluginImpl loadConfiguration
INFO: Loading configuration...
Aug 1, 2013 1:17:16 PM org.jvnet.hudson.plugins.backup.utils.BackupPersistence loadConfig
INFO: Config file not found.
Aug 1, 2013 1:17:18 PM ruby.RubyRuntimePlugin start
INFO: Injecting JRuby into XStream
Trying to load models from /production/jenkinsAKS/plugins/pathignore/WEB-INF/classes/models
Loading /production/jenkinsAKS/plugins/pathignore/WEB-INF/classes/models/pathignore_wrapper.rb
Aug 1, 2013 1:17:26 PM hudson.plugins.greenballs.PluginImpl start
INFO: Green Balls!
Aug 1, 2013 1:17:26 PM jenkins.InitReactorRunner$1 onAttained
INFO: Prepared all plugins
Aug 1, 2013 1:17:32 PM hudson.ExtensionFinder$GuiceFinder$FaultTolerantScope$1 error
WARNING: Failed to instantiate optional component org.jfrog.hudson.ivy.ArtifactoryIvyConfigurator$DescriptorImpl; skipping
Aug 1, 2013 1:17:32 PM jenkins.InitReactorRunner$1 onAttained
INFO: Started all plugins
Aug 1, 2013 1:17:32 PM jenkins.InitReactorRunner$1 onAttained
INFO: Augmented all extensions
Aug 1, 2013 1:17:32 PM jenkins.InitReactorRunner$1 onAttained
INFO: Loaded all jobs
Aug 1, 2013 1:17:32 PM hudson.plugins.scm_sync_configuration.ScmSyncConfigurationBusiness queueChangeSet
INFO: Queue of changeset     A hudson.model.UpdateCenter.xml
 aborted (scm manipulator not settled !)
Aug 1, 2013 1:17:32 PM org.jenkinsci.main.modules.sshd.SSHD start
INFO: Started SSHD at port 36227
Aug 1, 2013 1:17:32 PM jenkins.InitReactorRunner$1 onAttained
INFO: Completed initialization
Aug 1, 2013 1:17:32 PM hudson.TcpSlaveAgentListener <init>
INFO: JNLP slave agent listener started on TCP port 46056
The following triggers are available for your jobs
[Trigger] - Build periodically
[Trigger] - Build when another project is promoted
[Trigger] - Maven Dependency Update Trigger
[Trigger] - Poll SCM
[Trigger] - [BuildResultTrigger] - Monitor build results of other jobs
[Trigger] - [FSTrigger] - Monitor files
[Trigger] - [FSTrigger] - Monitor folder
[Trigger] - [IvyTrigger] - Poll with an Ivy script
[Trigger] - [ScriptTrigger] - Poll with a Groovy script
[Trigger] - [ScriptTrigger] - Poll with a shell or batch script
[Trigger] - [URLTrigger] - Poll with a URL
Aug 1, 2013 1:17:33 PM hudson.WebAppMain$2 run
INFO: Jenkins is fully up and running
Exception in thread "Jenkins cron thread" java.lang.OutOfMemoryError: PermGen space
Exception in thread "JmDNS(sagrdev3sb12.local.).State.Timer" java.lang.OutOfMemoryError: PermGen space
Exception in thread "ConnectorThread:[http-9040]" java.lang.OutOfMemoryError: PermGen space
Exception in thread "JmDNS(sagrdev3sb12.local.).Timer" java.lang.OutOfMemoryError: PermGen space
Exception in thread "WinstoneHostConfigurationMgmt:default" java.lang.OutOfMemoryError: PermGen space

有时候我看到:

    30  Aug 1, 2013 1:50:29 AM jenkins.InitReactorRunner$1 onAttained
    31  INFO: Prepared all plugins
    32  Exception in thread "pool-2-thread-20" java.lang.OutOfMemoryError: PermGen space
    33  Aug 1, 2013 1:51:10 AM winstone.Logger logInternal
    34  WARNING: Untrapped Error in Servlet
    35  java.lang.OutOfMemoryError: PermGen space
    36  Aug 1, 2013 1:51:12 AM winstone.Logger logInternal
    37  SEVERE: Error in the error servlet
    38  java.lang.OutOfMemoryError: PermGen space
    39  Exception in thread "Jenkins cron thread" java.lang.OutOfMemoryError: PermGen space
-bash-3.2$

我该如何解决这个问题?当我在我的Windows桌面电脑上做同样的练习时,出现了相同的问题。我需要使用较少或有限数量的插件吗?

谢谢


1
我只使用了最少量的插件,现在它可以工作了。但是我怀疑,一旦我将来下载更多插件,这个PermGen空间问题肯定会再次出现。 - AKS
你有没有找出是哪些插件或者在安装了多少个插件后开始出现PermGen错误? - Illidanek
2个回答

9

在我的~/.bash_profile文件中,我设置了以下三个变量。请注意,该文件中还有其他变量,例如JAVA_HOME、ANT_HOME、SONAR_HOME、SONAR_RUNNER_HOME等:

export JAVA_OPTS="-XX:MaxPermSize=512m -Xms512m -Xmx1024m"
export GRADLE_OPTS="-XX:MaxPermSize=512m"
export SONAR_RUNNER_OPTS="-Xmx512m -XX:MaxPermSize=512m"

所有的都可以正常工作。

第一条导出命令:可避免出现PermGen错误并启动Jenkins,第二条命令可使Gradle在Jenkins调用Gradle脚本(如.sh等另一个包装脚本)时正常运行,第三条命令可使"sonar-runner"命令正常工作(否则,在sonar-runner命令输出期间,当"Initialize Hibernate"行之后,我会收到PermGen错误)。 您应该在编译java、与静态代码分析工具有关的报告(pmd/checkstyle/findbugs)和其他代码覆盖率报告(jacoco/cobertura)所在的工作区中运行sonar-runner命令。 工作区应该有"sonar-project.properties"文件。 在SonarQube帮助页面上查找有关此文件以及项目中包含的所有变量的信息。

所有这些选项都在此处有文档: http://docs.oracle.com/javase/8/docs/technotes/tools/windows/java.html 或如果您使用Java 7,则在此处: http://docs.oracle.com/javase/7/docs/technotes/tools/windows/java.html


0

如果您正在使用Gradle,可以通过在Jenkins全局配置中添加GRADLE_OPTS全局环境变量来设置-Xmx或-XX:MaxPermSize。要执行此操作,请单击“管理Jenkins”,然后单击“配置系统”。在全局属性部分,单击“环境变量”复选框,然后添加一个名为GRADLE_OPTS的新环境变量,并将其值适当设置如下:

名称:GRADLE_OPTS 值:-Xmx1024m -XX:MaxPermSize=1024m

其中1024是指定的内存。您可以根据需要更改它。

Maven需要类似的配置。有关更多详细信息,请参见以下链接: https://wiki.jenkins-ci.org/display/JENKINS/Builds+failing+with+OutOfMemoryErrors


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接