tomcat伺服器經常報錯PermGen Space

hiCrazyYoung發表於2020-12-25

分析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

相關文章