在生產環境中運行 Tomcat 時,合理的 JVM 記憶體配置至關重要。不當的設定容易導致 OutOfMemoryError,甚至服務崩潰。本文詳細說明三種常見啟動模式下的記憶體參數調整方法,並解析關鍵參數含義,助你構建穩定高效的應用伺服器。
%CATALINA_HOME%\bin 目錄,編輯 service.bat 檔案。--JvmOptions 參數,在其雙引號末尾追加:-Xms256M;-Xmx512M;-XX:PermSize=128M;-XX:MaxPermSize=512M;
注意: 各參數間以分號 ; 分隔,且必須包含在引號內。
bin 目錄下,編輯 catalina.bat(Linux 為 catalina.sh)。rem ----- Execute The Requested Command --------------------------------------- 註解行,其下方新增:set JAVA_OPTS=%JAVA_OPTS% -server -Xms256M -Xmx512M -XX:PermSize=128M -XX:MaxPermSize=512M
此處使用空格分隔參數,並建議加上 -server 模式以啟用 Server VM 優化。
-Xms256M -Xmx512M -XX:PermSize=256M -XX:MaxPermSize=512M

| 參數 | 含義 | 建議設定原則 |
|---|---|---|
-Xms | 堆初始大小 | 通常設定為 -Xmx 同值,避免動態擴容帶來的效能抖動。 |
-Xmx | 堆最大大小 | 視物理記憶體而定,建議不超過物理記憶體的 70%-80%。 |
-XX:PermSize | 永久代/元空間初始大小 | 載入類較多的應用需適當調大,防止「PermGen space」錯誤(JDK 8+ 已改為 Metaspace)。 |
-XX:MaxPermSize | 永久代/元空間最大大小 | 同 PermSize 或略大,確保類元資料空間充足。 |
關鍵提醒:
-Xmx的 5% 為觸發 GC 頻繁警告的閾值。若-Xmx512M,則 25.6M 剩餘空間會觸發警告。務必確保MaxPermSize大於此值,否則永久代耗盡仍會導致 OOM。
-Xlog:gc*:file=/var/log/tomcat/gc.log:time,uptime,level,tags(JDK 9+)或舊版 -XX:+PrintGCDetails -Xloggc:...。-XX:+UseG1GC) 適合大堆、低延遲場景;CMS 已棄用;ZGC/Shenandoah 適合超大堆(JDK 11+)。透過系統化的記憶體規劃與持續觀測,可大幅降低 Tomcat 因記憶體問題導致的服務中斷風險。