java.lang.OutOfMemoryError:jetty permgen spacee 程序运行过程出现内存溢出,怎么调整。 谢谢。

Eclipse/Tomcat(4)
&1、修改myeclipse.ini&
& & & 在Myeclipse安装目录下G:\MyEclipse8.5\Genuitec\MyEclipse&8.5有一个myeclipse.ini配置文件,设置如下:&
& & & -vmargs
& & & -Xmx512m
& & & -XX:MaxPermSize=256m
& & & -XX:ReservedCodeCacheSize=64m
2、设置Default&VM&Arguments&
& & &在myEclipse中,打开Windows -&&Preferences -& Java -& Installed&JREs -& 点击正在使用的JDK -& Edit -& Default&VM&Arguments文本框中输入:
& & & -Xms64m&&&-Xmx256m&
3、如果是web工程还报内存溢出,可能就要设置tomcat内存。
& & & myeclipse配置web服务器配置&Window—Preferences—Myeclipse—Servers—tomcat&5.x—JDK的Optional&Java&VM&arguments配置为:
& & & &-Xms256m&-Xmx512m&-XX:MaxNewSize=256m&-XX:MaxPermSize=256m
&&相关文章推荐
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:20953次
排名:千里之外
原创:57篇
(1)(1)(1)(1)(3)(2)(16)(9)(4)(11)(3)(1)(1)(5)java.lang.OutOfMemoryError: PermGen space
- 学得越多,忘得越多;忘得越多,知道的越少 - ITeye技术网站
博客分类:
最近把网站又一次升级..加入了spring..又添加了一些功能.
发布运行很成功.
但好景不长啊.过不了几天就发现服务器宕机了...
通过LOG4J的记录也发现不了什么..显示一切正常.甚是奇怪啊.
后来通过几次重启Tomcat.发现了更严重的问题,重启后,自己点击几个链接都会出现了宕机现象.
很是不解...
不能天天让客服MM重启服务器啊.她烦我更烦啊.
只能让MM把tomcat的运行日志发给我看看了...
看看日志:
引用
18:00:43 org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet jsp threw exception
java.lang.OutOfMemoryError: PermGen space
SEVERE: An exception or error occurred in the container during the request processing
java.lang.OutOfMemoryError: PermGen space
18:36:21 org.apache.tomcat.util.threads.ThreadPool$ControlRunnable run
SEVERE: Caught exception (java.lang.OutOfMemoryError: PermGen space) executing org.mon.ChannelSocket$SocketConnection@4af41d, terminating thread
完全的蒙了..怎么会有这种错误..内存溢出啊.
在自己的机子上只有512的内存都没有溢出,而且压力测试得蛮好.
怎么到了服务器上这种问题都出现了.
GOOGLE了一把:
解决问题的方法还是有的:
引用
一、java.lang.OutOfMemoryError: PermGen space
PermGen space的全称是Permanent Generation space,是指内存的永久保存区域,
这块内存主要是被JVM存放Class和Meta信息的,Class在被Loader时就会被放到PermGen space中,
它和存放类实例(Instance)的Heap区域不同,GC(Garbage Collection)不会在主程序运行期对
PermGen space进行清理,所以如果你的应用中有很多CLASS的话,就很可能出现PermGen space错误,
这种错误常见在web服务器对JSP进行pre compile的时候。如果你的WEB APP下都用了大量的第三方jar, 其大小
超过了jvm默认的大小(4M)那么就会产生此错误信息了。
解决方法: 手动设置MaxPermSize大小
修改TOMCAT_HOME/bin/catalina.sh
在“echo "Using CATALINA_BASE:&& $CATALINA_BASE"”上面加入以下行:
JAVA_OPTS="-server -XX:PermSize=64M -XX:MaxPermSize=128M"
建议:将相同的第三方jar文件移置到tomcat/shared/lib目录下,这样可以达到减少jar 文档重复占用内存的目的。
二、java.lang.OutOfMemoryError: Java heap space
Heap size 设置
JVM堆的设置是指java程序运行过程中JVM可以调配使用的内存空间的设置.JVM在启动的时候会自动设置Heap size的值,
其初始空间(即-Xms)是物理内存的1/64,最大空间(-Xmx)是物理内存的1/4。可以利用JVM提供的-Xmn -Xms -Xmx等选项可
进行设置。Heap size 的大小是Young Generation 和Tenured Generaion 之和。
提示:在JVM中如果98%的时间是用于GC且可用的Heap size 不足2%的时候将抛出此异常信息。
提示:Heap Size 最大不要超过可用物理内存的80%,一般的要将-Xms和-Xmx选项设置为相同,而-Xmn为1/4的-Xmx值。
解决方法:手动设置Heap size
修改TOMCAT_HOME/bin/catalina.sh
在“echo "Using CATALINA_BASE:&& $CATALINA_BASE"”上面加入以下行:
JAVA_OPTS="-server -Xms800m -Xmx800m&& -XX:MaxNewSize=256m"
三、实例,以下给出1G内存环境下java jvm 的参数设置参考:
http://blog.csdn.net/oiote/archive//2707877.aspx
JAVA_OPTS="-server -Xms800m -Xmx800m -XX:PermSize=64M -XX:MaxNewSize=256m -XX:MaxPermSize=128m -Djava.awt.headless=true "
如果用的是安装版的tomcat
/midnight/archive//1204862.html
引用
参数加的位置:&&
& tomcat5w.exe就是启动后显示在任务栏上的:&&
& java----&java& options里&&
& -Dcatalina.home=D:\JavaTools\Tomcat&& 5.5&&
& -Djava.endorsed.dirs=D:\JavaTools\Tomcat&& 5.5\common\endorsed&&
& -Djava.io.tmpdir=D:\JavaTools\Tomcat&& 5.5\temp&&
& -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManage&&
& 原来应该有这样的&&
& 只要再加上一行:&&
-XX:MaxPermSize=256MB
浏览: 424490 次
来自: 苏州
dfafaaffaaf
我把数据库里面的第一个字段的id 设置为0,好像这问题及没了
java.lang.OutOfMemoryError: Per ...
额,不知道这么多年过去了,楼主解决没有,
解决了分享哈博客访问:
博文数量: 858
博客积分: 11684
博客等级: 上将
技术积分: 9175
注册时间:
IT168企业级官微
微信号:IT168qiye
系统架构师大会
微信号:SACC2013
分类: Java
[开发]resin+spring+struts配搭在线上常见的三个问题
郑昀?201102
1、文件句柄数问题
现象1 :访问页面出现500错误,错误描述为:java.lang.NoClassDefFoundError ,后面跟的类名各式各样不一一列举了。
现象2 :Resin被Wathcdog自动重启,日志中表明这是因为:Resin shutdown from out of file descriptors 。
分析: 由于Linux默认文件句柄限制为1024(通过命令ulimit –n来查看),所以当Web Server应对高负载起了大量线程,incoming socket connections和outgoing socket connections都很多,而且后台代码也可能涉及大量句柄打开,尤其是struts+spring组合。
因此当句柄数迅速到达1024的限制后,无法打开新句柄,于是乎文件打不开、类定义找不到,诸如此类的错误就出现了。
短期策略是调大Linux下对文件句柄数限制。操作如附录1所示。对于这个数字,一般建议是32667,也可以设置的更大,我们直接调为51200。
2、PermSize问题
现象 :Resin被持续访问一段时间后,比如一天,就会报告如下500错误,导致所有页面不能访问:
??? OutOfMemoryError:PermGen space
此时,就只能重启机器了,重启resin都没用。
分析 :因为线上用了spring+struts,这些框架用到大量动态class,ClassLoader是把这部分内存放在PermGen space里的。而JVM的GC是不会清理PermGen space的。这样很容易导致线上应用报告PermGen space内存溢出。
解决 :通过在resin.xml中增加jvm-arg一系列参数,调大“PermSize”和“MaxPermSize”这两个参数来尽量避免出现JVM内存永久保存区域溢出错误。PermSize默认值参考附录2。修改情况参见附录3。
3、Xmx和Xms问题
现象 :Resin报告如下500错误,导致所有页面不能访问:
??? OutOfMemoryError:Java heap space
此时重启resin还可以恢复。
分析 :JVM默认的最大可用内存(-Xmx参数)和初始堆大小(-Xms参数)都偏小,很容易限制住服务器的能力。当Java架构的能力还没有发挥出来时,就已经被系统默认的各种参数限制住了,导致各种各样的异常。
解决 :通过在resin.xml中增加jvm-arg一系列参数,调大“Xms”和“Xmx”以及“Xmn”这三个参数。修改情况参见附录3。Xmn附录4。
其中Xmx的值可以设置得很大,比如4096MB,跟你的物理内存大小差不太多都行,64位Linux支持得住。Xmn的值是Xmx数值的1/4。
Xms的值可以与Xmx一样,省得当压力上来后,初始堆大小发现不够,JVM又得花时间去把内存区大小扩到最大可用内存的数值,就在这个过程,持续不断的高负载可能已经将服务器冲垮。这个机理就类似于我们熟知的SQL Server要根据业务,仔细思考指定数据库空间初始值和最大值以及自增长模式。默认SQL Server数据库空间自动增长是按10%比例增加的:如果你最开始建库时分配了1GB空间,但当压力上来后,数据很快到达1GB,那么数据库就会先锁住所有请求,自动在磁盘上增长出100MB的空间,在这个自动增长过程,所有Web请求就会被挂住,最终可能全部超时。
编辑/etc/profile,加入
ulimit -n 51200
有人认为设置为4096就可以,但在网络服务器上此数字最好调成几万,不然流量冲上来太容易冲破。
还有设置命令是:ulimit?–SHn 51200,-S、-H这两个参数的说明如下:
-H 设置硬件资源限制。-S 设置软件资源限制。-n size:设置内核可以同时打开的文件描述符的最大值。
还有另一种操作修改三个地方的设置,参见《修改 Ubuntu ulimit 限制》。
没有给resin.xml加PermSize的情况下,默认计算规则是:
“JVM 使用-XX:PermSize 设置非堆内存初始值,默认是物理内存的1/64 ;由XX:MaxPermSize 设置最大非堆内存的大小,默认是物理内存的1/4 。”
那么,如果是物理内存4GB,那么64分之一就是64MB,这就是PermSize默认值,也就是永生代内存初始大小;
四分之一是1024MB,这就是MaxPermSize默认大小。
优化规则:Server端的JVM最好将-Xms和-Xmx设为相同值。为了优化GC,最好让-Xmn值约等于-Xmx的1/4。
线上resin 4.0.15的resin.xml中增加如下配置节点:
??? -Xms4096m
??? -Xmx4096m
??? -Xmn1024m
??? -XX:PermSize=128m
-XX:MaxPermSize=256m
JVM的-Xmn参数含义是Young Generation的heap size。
JVM有2个GC线程。第一个线程负责回收Heap的Young区。第二个线程在Heap不足时,遍历Heap,将Young 区升级为Older区。Older区的大小等于-Xmx减去-Xmn,不能将-Xms的值设的过大,因为第二个线程被迫运行会降低JVM的性能。
阅读(9356) | 评论(2) | 转发(0) |
相关热门文章
给主人留下些什么吧!~~
确实逻辑有点乱哈,完全看不太懂啥意思啊?
你说的好乱。
请登录后评论。内存溢出的问题java.lang.OutOfMemoryError: PermGen space - ITeye问答
Error reading request, ignored
java.lang.OutOfMemoryError: PermGen space
java.lang.OutOfMemoryError: PermGen space
java.lang.OutOfMemoryError: PermGen space
Exception in thread "com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThrea
d-#2" Exception in thread "com.mchange.v2.async.ThreadPoolAsynchronousRunner$Poo
lThread-#1" Exception in thread "Timer-0" Exception in thread "com.mchange.v2.as
ync.ThreadPoolAsynchronousRunner$PoolThread-#0" java.lang.OutOfMemoryError: Perm
Gen space
java.lang.OutOfMemoryError: PermGen space
java.lang.OutOfMemoryError: PermGen space
java.lang.OutOfMemoryError: PermGen space
java.lang.OutOfMemoryError: PermGen space
java.lang.OutOfMemoryError: PermGen space
java.lang.OutOfMemoryError: PermGen space
java.lang.OutOfMemoryError: PermGen space
控制台报了这样的错。。。
-Xms256m -Xmx256m -XX:MaxNewSize=256m -XX:MaxPermSize=256m 这个我已经配置过了可还是不行
希望能尽快得到解决。。。。
问题补充:beneo 写道如果-XX:MaxPermSize=256m这样都不行,那真的有点不正常了
你加一下
-XX:PermSize=192m
-XX:MaxPermSize=256m
初始的permsize大一点
此外?请问你的工程到底有多大?是不是自己用了javasssit?
permsize绝对足够大!
工程没有用到框架只是单纯jsp但是域名绑定的很多。。。工程差不多200MB
问题补充:beneo 写道换所有的jar到最新把
这个也没问题。。。
问题补充:beneo 写道就如你说所,PermSize足够大,这个我也同意
所以说,你可以试试所有的jar换成最新的,把你的代码放到最新jdk上跑跑看。
Perm问题,抛开太小的因素之外,也只有你使用工具的bug所致了。。
你得数据库这快是c3p0对吧,或者hibernate
说说你得工作环境把
tomcat5.0
MyEclipse
连接池是普通的我们没有用框架
问题补充:beneo 写道就如你说所,PermSize足够大,这个我也同意
所以说,你可以试试所有的jar换成最新的,把你的代码放到最新jdk上跑跑看。
Perm问题,抛开太小的因素之外,也只有你使用工具的bug所致了。。
你得数据库这快是c3p0对吧,或者hibernate
说说你得工作环境把
连接池就是那种dataSource
我没有用框架
部署没有错
出错是在服务器发布以后几个小时以后服务器就死了然后报这种错
问题补充:beneo 写道引用
tomcat5.0
连接池就是那种dataSource
我没有用框架
部署没有错
出错是在服务器发布以后几个小时以后服务器就死了然后报这种错
一般来说,服务器启动了以后,PermSize是不会有多大变化的,既然是启动几个小时候出现问题,那几乎可以肯定是jar包的冲突或者bug,你看看部署后,lib目录下面有哪些jar包?最可疑的应该是cglib, javassit, 或者asm吧
你说的这几个jar包都没有用到。。。
问题补充:beneo 写道引用
你说的这几个jar包都没有用到。。。
在你的webapp目录下,WEB-INF下面的lib文件夹,里面有哪些包?
activation.jar
dom4j.jar
DqbbTools.Ajax.1.1.jar
dwr.jar
jspSmartUpload.jar
jstl.jar
jtds-1.2.2.jar
jtds-1[1].2.jar
log4j-1.2.8.jar
mail.jar
msbase.jar
mssqlserver.jar
msutil.jar
standard.jar
问题补充:beneo 写道嗯,如果你用的是sql server,我对这个就不熟悉了。
不过我有个思路,你写一个,然后放到启动参数里面,这样的话,你就能看到到底在加载那些类了,由此来判断是哪个部分出了问题?当然如果需要的话,我也可以给你做一个。。。
代理?我不太懂。。。你帮做一个吧。。。我试试看。。。
问题补充:songfantasy 写道用jdk自带的 visualVm看一下,实际的需要的堆和非堆内存,然后设置。
内存没问题
问题补充:songfantasy 写道用jdk自带的 visualVm看一下,实际的需要的堆和非堆内存,然后设置。
上传的是错误日志
问题补充:CshBBrain 写道1.你使用的tomcat是在myeclipse里面启动的嘛,是的话 按照 duruilin 的方法试试。
2.是单独启动tomcat,则在catalina.sh或catalina.bat添加上内存分配选项。
另外推荐我以前写的2篇文章,希望对你有所帮助。
/blog/526356
/blog/551085
不是他说的原因。。。这个配置绝对没问题。。。我用软件测过。。。正常访问不会出现问题。。。这是我的错误日志你看看。。。
问题补充:CshBBrain 写道有条件可用qq的远程协助,帮你看下。
我上传了错误日志了。。。我们的机器是在正常启动后几小时以后死掉的。。。
问题补充:CshBBrain 写道这样太费劲了,直接加我qq:
。。。真不好意思。。。公司不让装口口。。。
问题补充:zjugzg 写道你的环境中用jdk版本是多少的?
我在你的log中发现除了NPE异常外还有下面这个:
11:42:34 StandardWrapperValve[jsp]: Servlet.service() for servlet jsp threw exception
java.lang.UnsupportedClassVersionError: Bad version number in .class file
你的环境可能用了比较老的jdk,比如用了jdk1.4.2,但是你的lib库中有用jdk5.0以上版本的类。
希望对你有帮助。
我们是5.6的
问题补充:CshBBrain 写道配置好工具了吗?截张图片贴出来看看。
我在桌面上解压了这个东西怎么解压呀???
问题补充:CshBBrain 写道配置好工具了吗?截张图片贴出来看看。
在桌面上解压了。。。把这个东西放哪呀?
问题补充:CshBBrain 写道配置好工具了吗?截张图片贴出来看看。
怎么执行???安装到哪???
问题补充:ahopedog2 写道日志里有很多的错误,还有虚拟机版本的问题,是不是这些错误导致虚拟机重复加载class造成的呢?
我现在是这么认为的。。。可是具体错误还不是很清楚。。。
问题补充:DavisWang 写道这个配置的太小了 -Xmx256m 试试 -Xmx1024m
已经比你这个还要大了
问题补充:smapple 写道我前天做的项目还出现了内存溢出的问题,最后总结了一下,如果你是在本机上用eclipse或者是myEclipse启动的,就在eclipse或myEclipse中改JVM的配置,如果是用tomcat.exe直接启动的,则要改catalina.bat,如果是Windows的话,要改tomcat5w.exe里面的东西,只有这样,你该的配置才会有效的,改完后,启动你的tomcat,打到tomcat的主页,点击左边的status选项,看看里面显示的JVM的初始、最大内存值等参数是不是和你改的一样。或者在你的代码里加上:
System.out.println("TotalMemory :::: " + (Runtime.getRuntime().totalMemory()/() + "M"));&
System.out.println("Max Memory :::: " + (Runtime.getRuntime().maxMemory()/() + "M"));&
System.out.println("Free Memory :::: " + (Runtime.getRuntime().freeMemory()/() + "M"));
这几句话也行。
希望对你有用。
嗯!我试下。。。
问题补充:ahopedog2 写道日志里有很多的错误,还有虚拟机版本的问题,是不是这些错误导致虚拟机重复加载class造成的呢?
问题补充:beneo 写道我保证上面的哪些做法都没有。
你是PermSize在运行后不断增长,只有2种情况会这样
1. jar包或者jdk代码的bug,或者是用错误
2. 代码上面有类似与String#intern这种能在Perm代消耗数据的代码
其他的一切都是浮云。
所以还是建议神马都换最新的,然后检检查你自己的代码,解决所有的异常,或者dump代码出来看看,神马占Perm最多,我想一定不是class
公司允许范围内只能是这些异常可以拿出来看看
问题补充:freeheron 写道还是看看你的应用有没有内存泄漏吧,这肯定不是内存不够的问题。PermGen区满一般都是内存有泄漏。jmap看看是什么对象数量不正常。
我现在把服务器重新装了一下,然后再测试看看。。。
问题补充:cfying 写道-Xms256m -Xmx256m -XX:MaxNewSize=256m -XX:MaxPermSize=256m
兄弟这个样就行了
您回答之前应该先看看上面对话。。。
问题补充:我们重新安装了一下tomcat现在没问题了我估计是tomcat加载的类太多原来的内存占了很多却没有清除掉。。。不知道一段时间后会不会再出现这个问题。。。
问题补充:qzhai 写道没遇到过这个问题,路过
beneo 写道看把,说来说去还是update你的tomcat
嗯嗯嗯。。。不过也不算是升级。。。就是重装了下。。。原来是5.0现在还是5.0
问题补充:aiyust070 写道-Xms256m -Xmx256m -XX:MaxNewSize=256m -XX:MaxPermSize=256m
改为:
-Xms1024m -Xmx1024m -XX:MaxNewSize=256m -XX:MaxPermSize=256m
如果还不行,加大Xmx
这些真的足够大了。。。
问题补充:这是新报的错误
(980 Bytes)
下载次数: 39
(922 Bytes)
下载次数: 10
是你程序的问题,不是内存设置问题
你好好看下 rank4.jsp 这个文件
里边有个数组操作,可能要的内存比较大,把不要的对象都置空,优化下这个jsp文件,你在试下
只加大内存的分配是没有用的& 建议你结合多种方法寻找问题&
例如虚拟机监控、内存堆栈监控、压力测试、findbug检查代码、内存分配控制等等。
找处真正的原因。(注 在测试的过程种可以更换几种应用服务器试试 )
去检查代码吧
-Xms256m -Xmx256m -XX:MaxNewSize=256m -XX:MaxPermSize=256m
改为:
-Xms1024m -Xmx1024m -XX:MaxNewSize=256m -XX:MaxPermSize=256m
如果还不行,加大Xmx
看看你的rank4.jsp生成的rank4_jsp.java 741行附近 的ArrayList有没有问题
这个可能的情况太多了,要具体情况具体分析。我只说一下
如果是应用本身的问题的情况下的解决方法:
1. cd $JAVA_HOME/bin
2. ./jps&& 这里会返回当前java主进程的id ,例如是2086
3. ./jmap .. 具体参数我忘记了,可以看一下命令的提示。
这样会得到一个heap dump文件,然后用eclipse的
Eclipse Memory Anaylyser来分析这个文件,能够看到可能存在的内存泄漏在哪里~
呵呵 学习者
没遇到过这个问题,路过
看把,说来说去还是update你的tomcat
-Xms256m -Xmx256m -XX:MaxNewSize=256m -XX:MaxPermSize=256m
兄弟这个样就行了
还是看看你的应用有没有内存泄漏吧,这肯定不是内存不够的问题。PermGen区满一般都是内存有泄漏。jmap看看是什么对象数量不正常。
&html xmlns="http://www.w3.org/1999/xhtml"&
&head&
&meta http-equiv="Content-Type" content="text/ charset=utf-8" /&
&body&
&div&
&&&&&& &%
Runtime lRuntime = Runtime.getRuntime();
out.println("*** BEGIN MEMORY STATISTICS ***&br/&");
out.println("Free Memory: "+lRuntime.freeMemory()+"&br/&");
out.println("Max&& Memory: "+lRuntime.maxMemory()+"&br/&");
out.println("Total Memory: "+lRuntime.totalMemory()+"&br/&");
out.println("Available Processors : "+lRuntime.availableProcessors()+"&br/&");
out.println("*** END MEMORY STATISTICS ***");
%&
&/body&
&/html&
用这个页面测试你内存是不是真正更改了
这个问题如果只是修改设置JVM的大小的话,只是起到了缓解作用,没有治本,之前我也是遇到类似的问题,很可能程序的bug引起内存泄露,导致应用服务器崩溃,多检查下自己的程序代码,例如涉及到流之类的处理问题等.
建议楼主写一个过滤器,里面打印请求的url,已用内存大小,还剩内存大小。这样就可以很清晰的看出各个请求所需要内存大小了,这个方法很灵的哦,我们就用这个方法解决过一个和操作系统有关的内存问题。
如果你的开发工具用的是eclipse,则需要在eclipse中配置permSize的大小,否则不会升效。
我保证上面的哪些做法都没有。
你是PermSize在运行后不断增长,只有2种情况会这样
1. jar包或者jdk代码的bug,或者是用错误
2. 代码上面有类似与String#intern这种能在Perm代消耗数据的代码
其他的一切都是浮云。
所以还是建议神马都换最新的,然后检检查你自己的代码,解决所有的异常,或者dump代码出来看看,神马占Perm最多,我想一定不是class
日志里有很多的错误,还有虚拟机版本的问题,是不是这些错误导致虚拟机重复加载class造成的呢?
这个配置的太小了 -Xmx256m 试试 -Xmx1024m
补充上面的,如果是windown服务器的话,要改tomcat5w.exe里面的东西
我前天做的项目还出现了内存溢出的问题,最后总结了一下,如果你是在本机上用eclipse或者是myEclipse启动的,就在eclipse或myEclipse中改JVM的配置,如果是用tomcat.exe直接启动的,则要改catalina.bat,如果是Windows的话,要改tomcat5w.exe里面的东西,只有这样,你该的配置才会有效的,改完后,启动你的tomcat,打到tomcat的主页,点击左边的status选项,看看里面显示的JVM的初始、最大内存值等参数是不是和你改的一样。或者在你的代码里加上:
System.out.println("TotalMemory :::: " + (Runtime.getRuntime().totalMemory()/() + "M"));&
System.out.println("Max Memory :::: " + (Runtime.getRuntime().maxMemory()/() + "M"));&
System.out.println("Free Memory :::: " + (Runtime.getRuntime().freeMemory()/() + "M"));
这几句话也行。
希望对你有用。
CshBBrain说的不错。他的建议可以考虑下。
你的环境中用jdk版本是多少的?
我在你的log中发现除了NPE异常外还有下面这个:
11:42:34 StandardWrapperValve[jsp]: Servlet.service() for servlet jsp threw exception
java.lang.UnsupportedClassVersionError: Bad version number in .class file
你的环境可能用了比较老的jdk,比如用了jdk1.4.2,但是你的lib库中有用jdk5.0以上版本的类。
希望对你有帮助。
配置好工具了吗?截张图片贴出来看看。
我碰到的很多类似问题他们都描述的怪异,往往是我到现场分析后,10分钟之内问题解决。我看不到你那边的具体情况,很难帮你。
有条件可用qq的远程协助,帮你看下。
如果是"永久存储区"溢出的话,就是工程运行载入的class,interface元数据量太大,而服务器的永久存储区的空间不够。以前我碰到有人说他的服务器也配置了优化参数,而且按照常识推断是够大了,但还是出现这个问题,后来我和他一起用JVMSTART查看了服务的内存分配,他所配置的参数根本没有起作用,记得他设置了2g大小(服务器共有8G内存);我看他在catalina.sh中设置了java-opitions的,但就是溢出,后来发现是他启动服务的方式不对,根本不是调用的catalina.sh这个文件进行启动的。不知道这个案例对你是否有帮助。如果你用工具查看过,请将内存分配图发给我看看。
哈哈 我前面也遇到过这个问题 在网上查的都说是在tomcat的配置文件中加一句话
-Xmx1024M -Xms512M -XX:MaxPermSize=256m
结果启动工程还是内存溢出
结果发现是要加这句话 但是加的地方不对
应该在Myeclipse-&preferences-&myeclipse-&servers-&tomcat-&tomcat×.×-&JDK面板中的Optional Java VM arguments中添加以下参数:
-Xmx1024M -Xms512M -XX:MaxPermSize=256m
重启tomcat问题解决!
你这样做只能是测试,产品环境还会用MyEclipse么???我觉得他配错了位置。以前我也配错了位置。没有起到作用
1.你使用的tomcat是在myeclipse里面启动的嘛,是的话 按照 duruilin 的方法试试。
2.是单独启动tomcat,则在catalina.sh或catalina.bat添加上内存分配选项。
另外推荐我以前写的2篇文章,希望对你有所帮助。
/blog/526356
/blog/551085
哈哈 我前面也遇到过这个问题 在网上查的都说是在tomcat的配置文件中加一句话
-Xmx1024M -Xms512M -XX:MaxPermSize=256m
结果启动工程还是内存溢出
结果发现是要加这句话 但是加的地方不对
应该在Myeclipse-&preferences-&myeclipse-&servers-&tomcat-&tomcat×.×-&JDK面板中的Optional Java VM arguments中添加以下参数:
-Xmx1024M -Xms512M -XX:MaxPermSize=256m
重启tomcat问题解决!
等待问题出现的原因,楼上的说法按理可以解决的
不是有一片关于JVM的帖子吗? 里面有介绍关于java.lang.OutOfMemoryError: PermGen space。 你应用里面的dead stored太多造成。 重启应用通常是可以解决,最后还是要在代码上找问题。
如果我给你的包没有打出log,还是建议你换jdk最新版
先把NPE的问题解决一下,没有任何异常在看有没有OOM
用jdk自带的 visualVm看一下,实际的需要的堆和非堆内存,然后设置。
引用
问:OutOfMemory错误分几种?
答:分两种,分别是“OutOfMemoryError:java heap size”和”OutOfMemoryError: PermGen space”,两种都是内存溢出,heap size是说申请不到新的内存了,这个很常见,检查应用或调整堆内存大小。
“PermGen space”是因为永久存储区满了,这个也很常见,一般在热发布的环境中出现,是因为每次发布应用系统都不重启,久而久之永久存储区中的死对象太多导致新对象无法申请内存,一般重新启动一下即可。
2种么??很多种的了,别误导人。。。OOM只是异常名字而已,有很多原因导致OOM,我能说出来的就不止2种
嗯,优化一下程序代码
你改的JVM的内存值生效了吗?你最好查一下,在tomcat的主页上点击左边的status,查一下看看,可能有些设置不一定生效的.
问:OutOfMemory错误分几种?
答:分两种,分别是“OutOfMemoryError:java heap size”和”OutOfMemoryError: PermGen space”,两种都是内存溢出,heap size是说申请不到新的内存了,这个很常见,检查应用或调整堆内存大小。
“PermGen space”是因为永久存储区满了,这个也很常见,一般在热发布的环境中出现,是因为每次发布应用系统都不重启,久而久之永久存储区中的死对象太多导致新对象无法申请内存,一般重新启动一下即可。
增加-Xms的值试试,感觉实际分给PermSize的值不到256M.
可以用jconsole 或jvmstat 观察一下你的PermSize能否分配到256M的内存。
是不是出现无限递归了? 可以用jconsole监控一下 看是哪里出的问题
嗯,如果你用的是sql server,我对这个就不熟悉了。
不过我有个思路,你写一个,然后放到启动参数里面,这样的话,你就能看到到底在加载那些类了,由此来判断是哪个部分出了问题?当然如果需要的话,我也可以给你做一个。。。
引用
你说的这几个jar包都没有用到。。。
在你的webapp目录下,WEB-INF下面的lib文件夹,里面有哪些包?
引用
tomcat5.0
连接池就是那种dataSource
我没有用框架
部署没有错
出错是在服务器发布以后几个小时以后服务器就死了然后报这种错
一般来说,服务器启动了以后,PermSize是不会有多大变化的,既然是启动几个小时候出现问题,那几乎可以肯定是jar包的冲突或者bug,你看看部署后,lib目录下面有哪些jar包?最可疑的应该是cglib, javassit, 或者asm吧
首先,tomcat5.0 -& 能升到 tomcat 6么?
其次,根据与您的对话,您确定你的
引用
-Xms256m -Xmx256m -XX:MaxNewSize=256m -XX:MaxPermSize=256m
放对了位置么??你应该放到tomcat启动参数里面
还有,因为我看到com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread
我觉得你们的框架肯定不只是有jdk,既然你只用了myeclipse,myeclipse版本不同,里面的hibernate等框架的版本也不同的,所以有可能的话,myeclipse也升级一下
就如你说所,PermSize足够大,这个我也同意
所以说,你可以试试所有的jar换成最新的,把你的代码放到最新jdk上跑跑看。
Perm问题,抛开太小的因素之外,也只有你使用工具的bug所致了。。
你得数据库这快是c3p0对吧,或者hibernate
说说你得工作环境把
换所有的jar到最新把
如果-XX:MaxPermSize=256m这样都不行,那真的有点不正常了
你加一下
-XX:PermSize=192m
-XX:MaxPermSize=256m
初始的permsize大一点
此外?请问你的工程到底有多大?是不是自己用了javasssit?
已解决问题
未解决问题

我要回帖

更多关于 jetty permgen space 的文章

 

随机推荐