分析tomcat环境下的重启方式
方式一:sh shutdown.sh这种方式是让正在运行的java线程从运行态(running)改变为sleep,通过这种命名java线程会越来越多,这种方式关闭的tomcat,无法关闭JVM进程,JVM可以去清清除ermGenSpace中的内存(
方式二:kill -9 这种方式
当我们的tomcat中有很多的class文件时,就很有可能报错PermGen Space,指的是内存的永久保存区,该块内存主要是被JVM用来存放 class 和 mete 信息的,当 class 被加载 loader 的时候就会被存储到该内存区中,与存放类的实例的heap区不同,java中的 垃圾回收器GC 不会在主程序运行期对 PermGen space 进行清理,因为通过这种方法JVM进程也会被杀死,也就无法让JVM去清除PermGenSpace中的内存。
两种方式对比发现各有利弊,我们可以通过清楚服务器缓存:echo 3 > /proc/sys/vm/drop_caches
也可以给tomcat增大MaxPermSize的容量:
修改 TOMCAT_HOME/bin/catalina.sh:JAVA_OPTS="$JAVA_OPTS" -server -XX:PermSize=128m -XX:MaxSize=512m