首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

Tomcat 記憶體配置最佳實踐:避免 JVM OOM 的完整指南

     編輯:Java 綜合教學

Tomcat 記憶體配置最佳實踐:避免 JVM OOM 的完整指南

在生產環境中運行 Tomcat 時,合理的 JVM 記憶體配置至關重要。不當的設定容易導致 OutOfMemoryError,甚至服務崩潰。本文詳細說明三種常見啟動模式下的記憶體參數調整方法,並解析關鍵參數含義,助你構建穩定高效的應用伺服器。

一、以 Windows 服務方式啟動

  1. 進入 %CATALINA_HOME%\bin 目錄,編輯 service.bat 檔案。
  2. 尋找 --JvmOptions 參數,在其雙引號末尾追加:
-Xms256M;-Xmx512M;-XX:PermSize=128M;-XX:MaxPermSize=512M;

注意: 各參數間以分號 ; 分隔,且必須包含在引號內。

二、以命令列進程方式啟動

  1. 同樣在 bin 目錄下,編輯 catalina.bat(Linux 為 catalina.sh)。
  2. 定位至 rem ----- Execute The Requested Command --------------------------------------- 註解行,其下方新增:
set JAVA_OPTS=%JAVA_OPTS% -server -Xms256M -Xmx512M -XX:PermSize=128M -XX:MaxPermSize=512M

此處使用空格分隔參數,並建議加上 -server 模式以啟用 Server VM 優化。

三、在 Eclipse/IDE 內嵌啟動

  1. 雙擊 Servers 視圖中的 Tomcat 伺服器實例。
  2. 點擊「Open launch configuration」連結。
  3. 切換至 Arguments 標籤,在 VM arguments 輸入框末尾追加(前面務必保留一個空格):
 -Xms256M -Xmx512M -XX:PermSize=256M -XX:MaxPermSize=512M

Eclipse Tomcat VM 參數配置示意圖

四、核心參數深度解析

參數含義建議設定原則
-Xms堆初始大小通常設定為 -Xmx 同值,避免動態擴容帶來的效能抖動。
-Xmx堆最大大小視物理記憶體而定,建議不超過物理記憶體的 70%-80%。
-XX:PermSize永久代/元空間初始大小載入類較多的應用需適當調大,防止「PermGen space」錯誤(JDK 8+ 已改為 Metaspace)。
-XX:MaxPermSize永久代/元空間最大大小同 PermSize 或略大,確保類元資料空間充足。

關鍵提醒: -Xmx 的 5% 為觸發 GC 頻繁警告的閾值。若 -Xmx512M,則 25.6M 剩餘空間會觸發警告。務必確保 MaxPermSize 大於此值,否則永久代耗盡仍會導致 OOM。

五、生產環境調優建議

  • 啟用 GC 日誌: 加入 -Xlog:gc*:file=/var/log/tomcat/gc.log:time,uptime,level,tags(JDK 9+)或舊版 -XX:+PrintGCDetails -Xloggc:...。
  • 選擇適合的 GC 演算法: G1 (-XX:+UseG1GC) 適合大堆、低延遲場景;CMS 已棄用;ZGC/Shenandoah 適合超大堆(JDK 11+)。
  • 監控指標: 關注 Heap 使用率、Old GC 頻率/耗時、Metaspace 佔用、線程數變化。

透過系統化的記憶體規劃與持續觀測,可大幅降低 Tomcat 因記憶體問題導致的服務中斷風險。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved