项目部署上线以后,频繁出现java.lang.OutOfMemoryError: PermGen space的内存溢出错误,究其原因,无非就是各种原因可能导致的内存不够了。
解决方法就是修改tomcat目录下bin/catalina.sh文件
JAVA_OPTS="-Xms1024M -Xmx1024M -XX:PermSize=256M -XX:MaxNewSize=256M -XX:MaxPermSize=512M -Djava.awt.headless=true"
其中的各种解释、原理不再赘述,这里有个MaxPermSize就是永久区的最大内存设置,当达到限制时报错。
而我遇到的问题是:明明是catalina.sh文件中添加了以上的配置,但是依然会出现内存溢出的异常,是我配置的永久区内存上限太小了吗
后来偶然 ps -ef | grep java 看了一下所有的java进程
/home/appusr/local/java/bin/java -Djava.util.logging.config.file=/home/appusr/local/webserver/8104/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.endorsed.dirs=/home/appusr/local/webserver/8104/endorsed -classpath /home/appusr/local/webserver/8104/bin/bootstrap.jar -Dcatalina.base=/home/appusr/local/webserver/8104 -Dcatalina.home=/home/appusr/local/webserver/8104 -Djava.io.tmpdir=/home/appusr/local/webserver/8104/temp org.apache.catalina.startup.Bootstrap start
/home/appusr/local/java/bin/java -Djava.util.logging.config.file=/home/appusr/local/webserver/8103/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Xms1024M -Xmx1024M -XX:PermSize=256M -XX:MaxNewSize=256M -XX:MaxPermSize=512M -Djava.awt.headless=true -Djava.endorsed.dirs=/home/appusr/local/webserver/8103/endorsed -classpath /home/appusr/local/webserver/8103/bin/bootstrap.jar -Dcatalina.base=/home/appusr/local/webserver/8103 -Dcatalina.home=/home/appusr/local/webserver/8103 -Djava.io.tmpdir=/home/appusr/local/webserver/8103/temp org.apache.catalina.startup.Bootstrap start
对比就发现问题了,我添加的那段配置并没有使用。
平时部署项目都是使用shell直接部署,tomcat配置修改了不知道什么原因没有使用,只好手动杀死这个进程然后重新部署,问题解决。