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大小仅仅是示例,你需要根据自己的项目需要来调整他们的值。
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#ix ...
- myeclipse tomcat java.lang.OutOfMemoryError: PermGen space错误的解决方法
错误代码: java.lang.OutOfMemoryError: PermGen space 原因分析: myeclipse或tomcat的内容分配的不够用,启动失败 解决方法: 1.找到tomca ...
- Eclipse中启动tomcat: java.lang.OutOfMemoryError: PermGen space的解决方法
tomcat启动的时候出现这种错误一般是项目引用了太多的jar包,或者反射生成了太多的类,或者有太多的常量池,导致非堆内存中永久保存区域不够,就有可能会报java.lang.OutOfMemoryEr ...
- Tomcat java.lang.OutOfMemoryError: PermGen space error
Often time, Tomcat may hits the following java.lang.OutOfMemoryError: PermGen space error. java.lang ...
- Eclipse中启动tomcat报错java.lang.OutOfMemoryError: PermGen space的解决方法
有的项目引用了太多的jar包,或者反射生成了太多的类,异或有太多的常量池,就有可能会报java.lang.OutOfMemoryError: PermGen space的错误, 我们知道可以通过jvm ...
- [转]Tomcat启动java.lang.OutOfMemoryError: PermGen space错误解决
原文地址:http://outofmemory.cn/java/OutOfMemoryError/outofmemoryerror-permgen-space-in-tomcat-with-eclip ...
- Tomcat内存溢出(java.lang.OutOfMemoryError: PermGen space)
Tomcat启动时报如下错误: java.lang.OutOfMemoryError: PermGen space 解决办法: 配置相关内存大小.其中按照启动tomcat的不同方式,分 ...
- Tomcat Xms Xmx PermSize MaxPermSize 区别 及 java.lang.OutOfMemoryError: PermGen space 解决
解决方案 在 catalina.bat 里的 蓝色代码前加入: 红色代码 rem ----- Execute The Requested Command ----------------------- ...
- Tomcat内存溢出(java.lang.OutOfMemoryError: PermGen space)的解决办法
Tomcat启动时报如下错误: java.lang.OutOfMemoryError: PermGen space 解决办法: 配置相关内存大小.其中按照启动tomcat的不同方式,分如下三种情况 a ...
随机推荐
- 友盟在部分手机上在进程被kill的情况下接收不到推送的问题
app集成友盟推送后就能接收推送消息,即使在进程被kill的情况下也能接收.这个因为友盟有长连互保,用户设备中任何一个集成过友盟推送的app打开,即使他的app没打开也能启动push service, ...
- FoxitReader软件下载并安装(图文详解)
不多说,直接上干货! FoxitReader官方网址:https://www.foxitsoftware.com/downloads/ 结束 欢迎大家,加入我的微信公众号:大数据躺过的坑 ...
- 在windows里安装系统7、8、10或Offcie或Visio等推荐的激活工具
不多说,直接上干货! (1)激活Windows或者Office前,你务必先进去KMSAuto Net的System界面,安装KMS-host Service; (2)然后回到Main主界面,选择Act ...
- C/C++练习题(一)
1. volatile 关键字在 C++ 中的性能和 C 的一样? 作用是一样的,但是其内部实现原理可能不同. 2. scanf 格式化输入是怎么赋值的? 由于scanf输入的数据个数是不定的,从键盘 ...
- python开发环境安装配置
需要安装的软件: Python2.7.14和Python3.6.4 要在电脑上同时安装两个版本 开发工具:PyCharm 是一个jetbrains的python开发工具 idea系列之一 Pyt ...
- 如何在python3环境下的Django中使用MySQL数据库
我们在使用Django过程中,连接MySQL数据库时,对Python不同的版本对应的库也不一样,用惯了Python2的人在使用Python3时经常会遇到下面的错误: Error loading MyS ...
- centos6 free 和 centos 7的free 的差异与对比
目录 一 centos6 free 常用参数和含义 centos6 free 命令示例 free 值讲解 计算公式 二 centos7 free 常用的参数 centos7 free 命令示例 计算公 ...
- 【转】CSS浮动(float,clear)通俗讲解
作者:杨元 本文链接:http://www.cnblogs.com/iyangyuan/archive/2013/03/27/2983813.html 很早以前就接触过CSS,但对于浮动始终非常迷惑, ...
- Tornado长轮询和WebSocket
Http协议是一种请求响应式协议, 不允许服务端主动向客户端发送信息. 短轮询是一种简单的实现服务端推送消息的解决方案, 客户端以一定间隔自动向服务端发送刷新请求, 服务端返回要推送的消息作为响应. ...
- Ionic3 UI组件之 PhotoViewer
PhotoViewer是常用的Cordova Plugin之一,用来显示图片. 组件特性: 根据Url显示图片 支持手势,可放大缩小 带分享按钮,可分享图片 带关闭按钮 加载错误时自动关闭组件 支持B ...