当前位置: 代码迷 >> Java Web开发 >> 服务器内存储器溢出,经处理未果,希望得到朋友们的帮助
  详细解决方案

服务器内存储器溢出,经处理未果,希望得到朋友们的帮助

热度:1039   发布时间:2013-02-25 21:14:44.0
服务器内存溢出,经处理未果,希望得到朋友们的帮助。
错误提示:java.lang.OutOfMemoryError: PermGen space


服务器配置如下:
  系统:Microsoft Windows Server 2003 R2 Standard Edition Service Pack 1
  内存:4.00GB
  Web应用服务器:apache-tomcat-6.0.35
  JDK:jdk1.6
 
经过以下处理还是没有处理好:
  1.释放掉一部分内存,可以运行一段时间(10分钟之内),但是又出现错误:java.lang.OutOfMemoryError: PermGen space
  2.更换tomcat,结果一样出错。

希望能得到大家的帮助,谢谢!





  



------解决方案--------------------------------------------------------
或者是SQL语句,select * 甚至select distinct * 这种,都会造成某些模块大量占用系统内存
------解决方案--------------------------------------------------------
Class在被Loader时会被放到PermGen space,和堆溢出还有点区别,网上有很多这样的帖,前几天在论坛里还有人问过。
http://blog.csdn.net/fengyie007/article/details/1780375
------解决方案--------------------------------------------------------
楼主你没代码别人不好给你解决啊。
凭个人经验,内存溢出原因有一下几点:
1、程序递归或者是个死循环,没有结束点;
2、程序使用超大的对象数组,而且长时间占据内存没有及时释放;
3、文件读写没有进行close流,导致内存吃紧。

个人博客:http://www.happyalaric.com
着手从上面三方面检查程序,希望对你有帮助
------解决方案--------------------------------------------------------
楼主搞错方向了吧?

PermGen space这个是SUN的JVM的特色。全称是Permanent Generation space,是指内存的永久保存区域。

这一部分用于存放Class和Meta的信息,Class在被 Load的时候被放入PermGen space区域,它和和存放Instance的Heap区域不同,GC(Garbage Collection)不会在主程序运行期对PermGen space进行清理。


总的来说,三种情况容易导致永久区溢出:
1、确实你的jar包太多了,存不下;
2、你经常使用热部署,重复多次就存不下了;
3、你用了动态JSP技术,经常动态生成JSP页面,每个JSP就是一个Class。

JVM参数的话是: -XX:PermSize=256m -XX:MaxPermSize=256m
------解决方案--------------------------------------------------------
PermGen space,永久存储区。因为永久存储区满了。这个很常见,一般在热发布的环境中出现,大多数原因是每次发布应用系统都不重启,久而久之永久存储区中的死对象太多,导致新对象无法申请新内存。
解决办法:重启应用程序
------解决方案--------------------------------------------------------
你部了几个系统啊?删除多余的系统,要是服务器里部了多个系统,而且有很多jar包就经常会出现内存溢出的问题
------解决方案--------------------------------------------------------
先在dos命令里用jconsole查看一下内存使用的情况,

可以在加大tomcat的-Xms -Xmx参数,因为tomcat的默认内存只用128M,很容易就爆掉了,可能是你查询的数据比较大吧
------解决方案--------------------------------------------------------
是程序访问的时候才报异常,还是不访问就报异常?

能够根据异常提示进行追踪?

能否部署到WAS或者其他Web服务器中试试?

先确定是环境本身(包括tomcat、jar包等)的问题,还是应用程序中存在的问题吧
------解决方案--------------------------------------------------------
和我遇到的问题一样,我就是这样解决的,希望能够帮助到你!

java.lang.OutOfMemoryError: Java heap space 解决方法 

这个问题的根源是jvm虚拟机的默认Heap大小是64M,可以通过设置其最大和最小值来实现.

设置的方法主要是以下几个:. 

1.可以在windows 更改系统环境变量 
加上JAVA_OPTS=-Xms64m -Xmx512m 

2.如果用的tomcat,在windows下,可以在 
C:\tomcat5.5.9\bin\catalina.bat 中加上::set JAVA_OPTS=-Xms64m -Xmx256m 
位置在: rem Guess CATALINA_HOME if not defined 这行的下面加合适. 

3.如果是linux系统 

Linux 在{tomcat_home}/bin/catalina.sh的前面,加上:set JAVA_OPTS='-Xms64 -Xmx512

------------------------------


如果要在myeclipse中启动,上述的修改就不起作用了,可如下设置: 

Myeclipse->preferences->myeclipse->servers->tomcat->tomcat×.×->JDK面板中的 
Optional Java VM arguments中添加:-Xmx1024M -Xms512M -XX:MaxPermSize=256m