Tomcat – java.lang.OutOfMemoryError:PermGen空间

通常,Tomcat可能会遇到以下java.lang.OutOfMemoryError: PermGen space错误。

java.lang.OutOfMemoryError: PermGen space
        at java.lang.ClassLoader.defineClass1(Native Method)
        at java.lang.ClassLoader.defineClass(ClassLoader.java:620)
        at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124)

这通常是在Tomcat重新启动几次之后发生的。

1.解决方案

默认情况下,为Tomcat分配很少的PermGen内存用于正在运行的进程。 要解决此问题,请使用以下Java VM选项增加PermGen内存设置。

-XX:PermSize<size> - Set initial PermGen Size.
-XX:MaxPermSize<size> - Set the maximum PermGen Size.

在下一步中,我们将向您展示如何在Windows和Linux环境下的Tomcat中设置VM选项。

2. Windows

Tomcat由此脚本文件catalina.bat管理, catalina.bat该脚本内,您会发现catalina.bat始终会找到并运行setenv.bat文件来设置环境变量。

{$tomcat-folder}\bin\catalina.bat
//...
rem Get standard environment variables
if not exist "%CATALINA_BASE%\bin\setenv.bat" goto checkSetenvHome
call "%CATALINA_BASE%\bin\setenv.bat"
goto setenvDone
:checkSetenvHome
if exist "%CATALINA_HOME%\bin\setenv.bat" call "%CATALINA_HOME%\bin\setenv.bat"
:setenvDone
//...

2.1要在Windows上设置环境变量,请手动创建setenv.bat ,并将其放入${tomcat-folder}\bin文件夹中。

${tomcat-folder}\bin\setenv.bat
set JAVA_OPTS=-Dfile.encoding=UTF-8 -Xms128m -Xmx1024m -XX:PermSize=64m -XX:MaxPermSize=256m

PS没有双引号,请设置JAVA_OPTS = {value}。

2.2重新启动Tomcat,它将调用setenv.bat文件来自动设置环境变量。

{$tomcat-folder}\bin\catalina.bat restart

3. Linux

在Linux上,过程是相同的,只是Tomcat使用catalina.shsetenv.sh代替。

3.1找出catalina.sh在哪里:

catalina.sh
$ sudo find / -name "catalina.sh"
Password:
find: /dev/fd/3: Not a directory
find: /dev/fd/4: Not a directory
/Users/mkyong/Downloads/apache-tomcat-6.0.35/bin/catalina.sh

3.2查看catalina.sh脚本,其行为类似于Windows,但请使用setenv.sh

//...
# Ensure that any user defined CLASSPATH variables are not used on startup,
# but allow them to be specified in setenv.sh, in rare case when it is needed.
CLASSPATH=

if [ -r "$CATALINA_BASE/bin/setenv.sh" ]; then
  . "$CATALINA_BASE/bin/setenv.sh"
elif [ -r "$CATALINA_HOME/bin/setenv.sh" ]; then
  . "$CATALINA_HOME/bin/setenv.sh"
fi
//...

3.3手动创建一个setenv.sh ,并将其放入${tomcat-folder}\bin\文件夹中。

${tomcat-folder}\bin\setenv.sh
export JAVA_OPTS="-Dfile.encoding=UTF-8 -Xms128m -Xmx1024m -XX:PermSize=64m -XX:MaxPermSize=256m"

PS带双引号,导出JAVA_OPTS =” {value}”。

3.4重新启动Tomcat。

注意
堆大小和非堆大小(perm gen)值只是一个例子,您应该相应地更改该值以适合您的项目需求。

参考文献

  1. 配置Tomcat内存设置
  2. 甲骨文:介绍永久一代
  3. 有用的JVM标志–第5部分(年轻一代垃圾收集)
  4. 如何在Ubuntu上安装Tomcat
  5. 找出您的Java堆内存大小

翻译自: https://mkyong.com/tomcat/tomcat-javalangoutofmemoryerror-permgen-space/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值