Tomcat – Java.Lang.OutOfMemoryError: PermGen Space

很多时候,在开发阶段Tomcat重复的重启过程中会遇到java.lang.OutOfMemoryError : PermGen space 错误。


1

2

3

4

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只分配了非常小的PermGen内存, 因此需要增加PermGen内存,你可以通过下面的Java VM选项设置。


1

2

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

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

换成Tomcat,该怎么设置呢? 接下来告诉你如果在Windows和Linux环境下,通过Tomcat来设置这些VM选项。

Windows

Tomcat是由脚本catalina.bat来管理的。深入到脚本里面,你会发现catalina.bat会去查找并且运行setenv.bat文件。这个文件就是用来设置环境变量的。


1

2

3

4

5

6

7

8

9

10

//{$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

//...

在Windows中设置环境,你需要手工创建setenv.bat文件,然后把它放在${tomcat-folder}\bin 目录下面。


1

2

//${tomcat-folder}\bin\setenv.bat

set JAVA_OPTS=-Dfile.encoding=UTF-8 -Xms128m -Xmx1024m -XX:PermSize=64m -XX:MaxPermSize=256m

注意:这里的JAVA_OPTS={value}没有双引号。

重启tomcat,它会自动调用setenv.bat文件来设置这些环境变量。


1

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

Linux

Linux平台下原理是一样的, 只是文件变成了catalina.sh 和 setenv.sh.

找到catalina.sh文件, 如果你不知道放在什么目录, 那么全盘扫描一下:


1

2

3

4

5

6

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

你会看到和Windows下类似的代码:


1

2

3

4

5

6

7

8

9

10

11

//...

# 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

//...

创建setenv.sh,把它放在${tomcat-folder}\bin\}目录下, 文件的内容是:


1

export JAVA_OPTS="-Dfile.encoding=UTF-8 -Xms128m -Xmx1024m -XX:PermSize=64m -XX:MaxPermSize=256m"

注意:这里和Windows有细微区别,这里的value是有双引号的export JAVA_OPTS=”{value}”。

重启Tomcat。

注意:我这里设置的Perm Gen大小仅仅是示例,你需要根据自己的项目需要来调整他们的值。

时间: 2024-12-18 00:22:42

Tomcat – Java.Lang.OutOfMemoryError: PermGen Space的相关文章

Tomcat – java.lang.OutOfMemoryError: PermGen space Cause and Solution

Read more: http://javarevisited.blogspot.com/2012/01/tomcat-javalangoutofmemoryerror-permgen.html#ixzz3QDWa3Zqi Tomcat web server often suffers from java.lang.OutOfMemoryError: PermGen space whenever you deploy and undeploy your web application coupl

myeclipse tomcat java.lang.OutOfMemoryError: PermGen space错误的解决方法

错误代码: java.lang.OutOfMemoryError: PermGen space 原因分析: myeclipse或tomcat的内容分配的不够用,启动失败 解决方法: 1.找到tomcat安装目录的这个文件\apache-tomcat-7.0.41\bin\catalina.bat,打开,在里面找到这句:rem ----- Execute The Requested Command .在这句下面添加:set JAVA_OPTS=%JAVA_OPTS% -Xms256m -Xmx10

Tomcat java.lang.OutOfMemoryError: PermGen space error

Often time, Tomcat may hits the following java.lang.OutOfMemoryError: PermGen space error. java.lang.OutOfMemoryError: PermGen space at java.lang.ClassLoader.defineClass1(Native Method) at java.lang.ClassLoader.defineClass(ClassLoader.java:620) at ja

tomcat java.lang.OutOfMemoryError: PermGen space

查阅网上,问题大概原因是 tomcat中部署项目引用第三方jar过多导致,可以在eclipse 中设置tomcat jvm 参数,如: -Xms800m -Xmx800m -XX:PermSize=256M -XX:MaxNewSize=512m -XX:MaxPermSize=512m 每个参数的意义(以下内容来源于:http://unixboy.iteye.com/blog/174173): 堆大小设置JVM 中最大堆大小有三方面限制:相关操作系统的数据模型(32-bt还是64-bit)限制

tomcat 开启时,或者访问网页后PermGen space错误解决方法 java.lang.OutOfMemoryError: PermGen space

公司以前都是一个项目一个tomcat,为了整合,我把两个项目放到了一个tomcat下,结果打开tomcat后,随便访问几个网页,或者登录一个账号后就会报错,提示 java.lang.OutOfMemoryError: PermGen space 上网搜索后,发现是JVM的默认内存只有4M太小,开启tomcat后要加载所有项目,就会导致JVM的内存溢出. Windows下tomcat修改 .编辑tomcat的catalina.bat文件,在第一行的后面增加一句:set JAVA_OPTS=-ser

windows系统bat方式启动tomcat出现java.lang.OutOfmemoryError:PermGen Space 错误

1.问题情景: 在部署项目时,将两个应用部署到同一个tomcat下,通过startup.bat启动服务时,控制台出现出现java.lang.OutOfmemoryError:PermGen Space 错误服务器环境:    系统版本:windows server 2008 r2    安装内存:64GB    处理器:8核(具体型号记不得了) 2.解决方法: PermGen Space:全称是Permanent Generation Space,是指内存的永久保存区域,这块内存主要是被JVM存

Tomcat内存溢出解决java.lang.OutOfMemoryError: PermGen space

背景:把两个项目同时部署在tomcat,启动快好的时候,报java.lang.OutOfMemoryError: PermGen space 原因:因为两个项目的jar包太多,JVM把里面的class文件加载时把默认的内存撑爆了 解决方法: (1)查找了很多网上的方法,但是还是解决不了我的问题.我的解决方法是: 右键eclipse项目==>run as===èrun Configuration=看左边的Apache Tomcat 下面的tomcat…=è点击后右边的Argument, VM ar

解决tomcat中server.xml设置二级域名 [java.lang.OutOfMemoryError: PermGen space]

<Host name="XXX.XXX.XXX" debug="0" appBase="C:\\JavaWeb\\mytomcatServer\\XXX"  unpackWARs="true" autoDeploy="true"  xmlValidation="false" xmlNamespaceAware="false">  <Alias>

Tomcat Xms Xmx PermSize MaxPermSize 区别 及 java.lang.OutOfMemoryError: PermGen space 解决

解决方案 在 catalina.bat 里的 蓝色代码前加入: 红色代码 rem ----- Execute The Requested Command --------------------------------------- set JAVA_OPTS=%JAVA_OPTS%-server -Xms800m -Xmx1024m  -XX:PermSize=128m -XX:MaxPermSize=256m echo Using CATALINA_BASE: "%CATALINA_BASE