系统CentOS6.4下yum安装了tomcat6和jdk1.6,安装配置过程如下:
http://www.111cn.net/sys/CentOS/72007.htm
tomcat中部署两个项目A、B,同时部署时报内存溢出错误,系统CPU负载飙升,而单独部署A、B 和 只部署多个A或者只部署多个B项目系统运行正常。
查看日志报错:OutOfMemoryError: PermGen space….
查询资料得知:是非堆溢出(永久保存区域溢出)
这种错误常见在web服务器对JSP进行pre compile的时候。如果你的WEB APP下都用了大量的第三方jar, 其大小超过了jvm默认的大小(4M)那么就会产生此错误信息了。如果web app用了大量的第三方jar或者应用有太多的class文件而恰好MaxPermSize设置较小,超出了也会导致这块内存的占用过多造成溢出,或者tomcat热部署时侯不会清理前面加载的环境,只会将context更改为新部署的,非堆存的内容就会越来越多。
解决办法:修改JVM非堆内存默认大小
网上提供的方法是:
修改tomcat是bin目录下的catalina.sh文件中的配置,但是yum安装的tomcat此文件的内容为空,将配置项 JAVA_OPTS=” -XX:PermSize=512M -XX:MaxPermSize=1024m” 加进 catalina.sh文件,重启tomcat,无效。
搜索JAVA_OPTS字符串找到tomcat的配置文件位置
find /etc |xargs grep “JAVA_OPTS”
[root@AY14070314494954704eZ tomcat6]# find /etc |xargs grep "JAVA_OPTS"
/etc/tomcat6/tomcat6.conf:#JAVA_OPTS="-Xminf0.1 -Xmaxf0.3"
/etc/tomcat6/tomcat6.conf:# Use JAVA_OPTS to set java.library.path forlibtcnative.so/etc/tomcat6/tomcat6.conf:#JAVA_OPTS="-Djava.library.path=/usr/lib"
/etc/tomcat6/tomcat6.conf:JAVA_OPTS="${JAVA_OPTS} -Djavax.sql.DataSource.Factory=org.apache.commons.dbcp.BasicDataSourceFactory"在/etc/tomcat6/tomcat6.conf文件中加入
JAVA_OPTS=" -XX:PermSize=512M -XX:MaxPermSize=1024m"
重启tomcat 项目运行正常。
PS:具体设置大小可以根据物理内存和项目实际运行需求进行调整。
yum安装tomcat的默认路径:/usr/share/tomcat6/
其它相关路径如下:(供参考)
clipboard
…………………………………………………………………………………………..
Tomcat中JAVA JVM内存溢出及合理配置
Tomcat本身不能直接在计算机上运行,需要依赖于硬件基础之上的操作系统和一个Java虚拟机。Tomcat的内存溢出本质就是JVM内存溢出,所以在本文开始时,应该先对Java JVM有关内存方面的知识进行详细介绍。
一、Java JVM内存介绍
JVM管理两种类型的内存,堆和非堆。