[Java] 使用Java Visual VM寻找PermGen Space的解决办法
在Eclipse使用tomcat运行3个项目时,老是报这个错误,以下为错误详情:
servlet threw exception
java.lang.OutOfMemoryError: PermGen space
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClassCond(Unknown Source)
at java.lang.ClassLoader.defineClass(Unknown Source)
at java.security.SecureClassLoader.defineClass(Unknown Source)
原先就知道可以设置相应参数即可:http://www.cnblogs.com/garinzhang/archive/2013/03/20/2970901.html
尝试过之后发现依然不行,在网络上继续寻找解决办法。
方法1:修改catalina.sh(Linux)/catalina.bat(Windows):
Linux通过文本搜索找到echo "Using CATALINA_BASE: $CATALINA_BASE",在上面加入:JAVA_OPTS=-server -XX:PermSize=64M -XX:MaxPermSize=128m
Windows通过搜索找到echo Using CATALINA_BASE: "%CATALINA_BASE%",在上面加入:set JAVA_OPTS=%JAVA_OPTS% -server -XX:PermSize=128m -XX:MaxPermSize=512m
此方法试过之后,异常依然出现,在更改了PermSize之后,重新启动tomcat,依然失败
方法2:还是修改catalina.sh/bat文件:
rem catalina.bat
set JAVA_OPTS=-Xms64m -Xmx256m -XX:PermSize=128m -XX:MaxNewSize=256M -XX:MaxPermSize=256m
#catalina.sh
JAVA_OPTS=
-Xms64m
-Xmx256m
-XX:PermSize=128m
-XX:MaxNewSize=256m
-XX:MaxPerSize=256m
重新启动tomcat,依然失败
方法3:在Eclipse的eclipse.ini文件最后添加如下:
-Xms256m
-Xmx512m
-XX:PermSize=512m
-XX:MaxPermSize=512m
重新启动Eclipse,依然失败
以上三个方法都是网上大部分给出的方法,想来别人肯定是实验成功的,为什么就不行呢,查看多篇文章之后,有些地方提到jvisualvm.exe这个工具,可以用来查看内存大小,最后通过以下步骤找到解决办法:
1. 使用JDK bin目录下面的工具:jvisualvm.exe(Java VisualVM),查看PermGen信息,才看出问题来,如下图红框为PermGen,旁边的tab为堆,就是所谓的Heap(如果Heap出现问题,则可以使用它来查看)
PermGen下面的三个值分别是(最小值、当前正在用的、最大值),我在Eclipse启动的时候,PermGen显示,最小值和最大值只有64M,所以很简单的溢出了,而我明明改过tomcat和eclipse的配置文件了呀,为什么还是这样呢?
2. 直接从tomcat/bin目录下去启动(不使用Eclipse的插件),发现我VisualVM里的tomcat的PermGen的最小、大值发生了改变,与先前在tomcat里设置的值相符,并且能正常启动。
这说明,前面方法1、2设置的值是对的,网上给出的方法是对的,由于我设置的PermGen值为256M,而我总共分配给JVM的才256M,所以又出现Heap溢出,这时候可以使用Visual VM清晰看出Heap溢出的情况。所以在设置的时候PermGen占的内存不能大于等于VM的占的总内存,设置为一半就差不多了
3. 此时问题很明确,Eclipse的tomcat插件肯定不是使用的tomcat安装目录下的设置,或者在eclipse被覆盖了,所以找到Eclipse的Tomcat插件设置,设置如下:
此时再通过Eclipse启动tomcat,就再也没出现这个问题了
后记:通过对Eclipse的内存使用Visual VM查看,发现方法3其实设置的是Eclipse的设置,不是tomcat的,所以以后设置不对的时候,使用Visual VM一看必知问题在哪。
参考:
http://www.cnblogs.com/xwdreamer/archive/2011/11/21/2296930.html
http://woo-program.iteye.com/blog/1243613
http://blog.sina.com.cn/s/blog_6840f82901013wk8.html
http://www.iteye.com/problems/93036
http://www.mkyong.com/tomcat/tomcat-javalangoutofmemoryerror-permgen-space/
http://hi.baidu.com/chssheng2007/item/3f8cd7e7d41ed80c8c3ea8c2
http://hi.baidu.com/ijczwiiukobnorq/item/9d6ca3c35ed80c7788ad9e66
[Java] 使用Java Visual VM寻找PermGen Space的解决办法的更多相关文章
- Tomcat内存溢出(java.lang.OutOfMemoryError: PermGen space)的解决办法
Tomcat启动时报如下错误: java.lang.OutOfMemoryError: PermGen space 解决办法: 配置相关内存大小.其中按照启动tomcat的不同方式,分如下三种情况 a ...
- 在Eclipse中运行Jboss时出现java.lang.OutOfMemoryError:PermGen space及其解决方法
在Eclipse中运行Jboss时出现java.lang.OutOfMemoryError:PermGen space及其解决方法 在Eclipse中运行Jboss时,时间太长可能有时候会出现java ...
- java.lang.OutOfMemoryError: PermGen space及其解决方法(转载)
java.lang.OutOfMemoryError: PermGen space及其解决方法 分类: java2007-09-11 12:34 162242人阅读 评论(51) 收藏 举报 gene ...
- java.lang.ClassNotFoundException: oracle.jdbc.driver.OracleDriver 错误的解决办法
java.lang.ClassNotFoundException: oracle.jdbc.driver.OracleDriver 错误的解决办法 (2011-05-05 16:08:05) 转载▼ ...
- jmeter—PerfMon Metrics Collector(附java.io.IOException: Agent is unreachable via TCP错误解决办法)
jmeter—PerfMon Metrics Collector(附java.io.IOException: Agent is unreachable via TCP错误解决办法 转自https:// ...
- Exception in thread "main" java.lang.UnsupportedClassVersionError: * : Unsupported major.minor version 52.0 解决办法
Exception in thread "main" java.lang.UnsupportedClassVersionError: * : Unsupported major.m ...
- Scrapy安装报错 Microsoft Visual C++ 14.0 is required 解决办法
Scrapy安装报错 Microsoft Visual C++ 14.0 is required 解决办法原因:Scrapy需要的组 twisted 需要 C++环境编译. 方法一:根据错误提示去对应 ...
- 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 ...
随机推荐
- 【Java POI】POI基于事件驱动解析大数据量2007版本Excel,空值导致列错位问题
1.目前测试了20M的文件,可以读取. 2.支持单个工作表1万+的数据行数,耗时如图. 3.以下是关键地方处理的代码 //Accepts objects needed while parsing. / ...
- phpcms二层栏目下拉和当前栏目高亮
这里需要嵌套loop标签,既双层循环 第一层loop的catid = 0代表顶级栏目 第二层loop的catid = "$r[catid]"代表上层循环的栏目id <ul c ...
- 【leetcode】Wildcard Matching
Wildcard Matching Implement wildcard pattern matching with support for '?' and '*'. '?' Matches any ...
- poj 1220(短除法)
http://poj.org/problem?id=1220 题意:进制转换,把a进制转换为b进制. 如果数据不大的话,那么这个题还是很简单的,但这个题就是数据范围太大,所以这里可以采用短除法来做. ...
- poj 3984
http://poj.org/problem?id=3984 题目很简单,就是简单的BFS吧,主要的难点在于坐标的问题 这个呢,可以反其道而行之,就是你从(1,1)到(5,5),你肯定走过一次 走过一 ...
- Unity3d 查找所选的是否引用过某资源
一.使用方式: 1.选择要被查找的资源,右键->Find Reference 2.把资源拽入Res,点Find 3.输出结果见Console //代码 using UnityEngine; us ...
- 自动编译和提交脚本(结合svn和visual studio)
@echo 更新代码开始----------------- TortoiseProc.exe /command:update /path:"D:\work\mmsanguo_publish_ ...
- Android SDK打包
2015年6月18日 14:38:49 星期四 eclipse: 1. 将写好的代码上传版本库 2. 删除 /bin/* 3. eclipse->project->clean... 4. ...
- 括号配对问题_栈<stack>
问题 A: 括号配对问题 时间限制: 3 Sec 内存限制: 128 MB提交: 3 解决: 2[提交][状态][讨论版] 题目描述 现在,有一行括号序列,请你检查这行括号是否配对. 输入 第一行 ...
- Divide and conquer:4 Values whose Sum is 0(POJ 2785)
找四个数的和为0 题目大意:给定四个集合,要你每个集合选4个数字,组成和为0 这题是3977的简单版,只要和是0就可以了 #include <iostream> #include < ...