tomcat内存溢出总结[Java编程]
本文“tomcat内存溢出总结[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
在生产环境中tomcat内存设置不好很简单呈现内存溢出.造成内存缘由是不一样的,当然处理方法也不一样.
这里按照平常碰到的情形和相关资料举行一个总结.常见的普通会有下面三种情形:
1.OutOfMemoryError: Java heap space
2.OutOfMemoryError: PermGen space
3.OutOfMemoryError: unable to create new native thread.
关于前两种情形,在利用本身没有内存泄露的情形下可以用设置tomcat jvm参数来办理.(-Xms -Xmx -XX:PermSize -XX:MaxPermSize)
最后一种大概需求调整操作系统和tomcat jvm参数同时调整才能到达目的.
第一种:是堆溢出.
在JVM中假如98%的时间是用于GC且可用的 Heap size 不足2%的时刻将抛出此非常信息.
没有内存泄露的情形下,调整-Xms -Xmx参数可以办理.
-Xms:初始堆大小
-Xmx:最大堆大小
但堆的大小受下面三方面影响:
1.相关操作系统的数据模子(32-bt还是64-bit)限制;(32位系统下,普通限制在1.5G~2G;我在2003 server 系统下(物理内存:4G和6G,jdk:1.6)测试 1612M,64为操作系统对内存无限制.)
2.系统的可用虚拟内存限制;
3.系统的可用物理内存限制.
堆的大小可以利用 java -Xmx***M version 号令来测试.支持的话会呈现jdk的版本号,不支持会报错.
-Xms -Xmx一班配置成一样对比好比方set JAVA_OPTS= -Xms1024m -Xmx1024m
第二种:永久保存区域溢出
PermGen space的全称是Permanent Generation space,是指内存的永久保存区域.这一部份用于存放Class和Meta的信息,Class在被 Load的时刻被放入PermGen space区域,它和和存放Instance的Heap区域差别,GC(Garbage Collection)不会在主程序运行期对PermGen space举行清理,所以假如你的APP会LOAD很多CLASS的话,就极大概呈现PermGen space错误.这种错误常见在web服务器对JSP举行pre compile的时刻.但目前的hibernate和spring项目中也很简单呈现这样的问题.http://www.javaeye.com/topic/80620?page=1 的帖子有谈论的这个问题.大概是由于这些框架会动态class,并且jvm的gc是不会清理PemGen space的,招致内存溢出.
这一个普通是加大-XX:PermSize -XX:MaxPermSize 来办理问题.
-XX:PermSize 永久保存区域初始大小
-XX:PermSize 永久保存区域初始最大值
这普通结合第一条利用,比方 set JAVA_OPTS= -Xms1024m -Xmx1024m -XX:PermSize=128M -XX:PermSize=256M
有一点需求注意:java -Xmx***M version 号令来测试的最大堆内存是 -Xmx与 -XX:PermSize的和 比方系统支持最大的jvm堆大小事1.5G,那-Xmx1024m -XX:PermSize=768M 是无法运行的.
以上是“tomcat内存溢出总结[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |