Tomcat內存設置配置步驟
Tomcat的內存配置主要通過調整JVM參數實現,核心參數包括初始堆內存(-Xms)、最大堆內存(-Xmx)、永久代內存(-XX:PermSize/-XX:MaxPermSize,Java 8后替換為-XX:MetaspaceSize/-XX:MaxMetaspaceSize)等。以下是不同環境下的具體配置方法及注意事項:
修改%TOMCAT_HOME%\bin\catalina.bat文件(%TOMCAT_HOME%為Tomcat安裝目錄),在文件開頭添加以下內容(建議將Xms和Xmx設置為相同值,避免堆內存頻繁擴容):
set JAVA_OPTS=-Xms512m -Xmx1024m -XX:PermSize=128m -XX:MaxPermSize=256m
-Xms512m:JVM初始堆內存為512MB;-Xmx1024m:JVM最大堆內存為1024MB(不超過物理內存的80%);-XX:PermSize=128m:永久代初始內存(用于存儲Class元數據,Java 8前有效);-XX:MaxPermSize=256m:永久代最大內存。若Tomcat以Windows服務形式運行,需通過注冊表修改內存參數:
regedit),導航至路徑:HKEY_LOCAL_MACHINE\SOFTWARE\Apache Software Foundation\Procrun 2.0\TomcatX\Parameters\Java(TomcatX為服務名稱,如Tomcat8);JvmMs(初始內存)和JvmMx(最大內存)鍵值,修改其數值(單位:MB),例如:
JvmMs:512;JvmMx:1024;修改$TOMCAT_HOME/bin/catalina.sh文件($TOMCAT_HOME為Tomcat安裝目錄),在文件開頭(cygwin=false之上)添加以下內容:
JAVA_OPTS="-server -Xms512m -Xmx1024m -XX:PermSize=128m -XX:MaxPermSize=256m -Xss1024K"
-server:啟用JDK的Server模式(提升性能,適用于生產環境);-Xss1024K:每個線程的棧內存大?。J1MB,可根據應用線程數調整,減少內存占用)。若在Eclipse中通過“Servers”視圖運行Tomcat(外置Tomcat),需通過以下步驟修改內存:
Open;Open launch configuration(打開啟動配置);Arguments標簽頁;VM arguments文本框中追加以下內容:-Xms512M -Xmx1024M -XX:PermSize=128M -XX:MaxPermSize=256M
Apply保存設置,重啟Tomcat。堆內存(-Xms/-Xmx):
-Xms:JVM啟動時分配的初始堆內存(默認為物理內存的1/64);-Xmx:JVM可使用的最大堆內存(默認為物理內存的1/4)。-Xms和-Xmx設置為相同值,避免堆內存頻繁擴容(擴容會導致GC停頓,影響性能)。堆內存最大值不宜超過物理內存的80%(如16GB物理內存,建議設置為12GB以內)。永久代/元空間(-XX:PermSize/-XX:MaxPermSize / -XX:MetaspaceSize/-XX:MaxMetaspaceSize):
-XX:MaxPermSize=256m或-XX:MaxMetaspaceSize=512m),避免OutOfMemoryError: PermGen space錯誤。年輕代(-Xmn):
年輕代是堆內存的一部分,用于存儲新創建的對象(存活時間短的對象)。建議設置為堆內存的1/3~1/4(如-Xmx1024m時,-Xmn設置為256MB~384MB),提升Minor GC效率。
修改配置后,重啟Tomcat,通過以下命令驗證內存參數是否生效:
# Linux
sudo lsof -i:8080 # 假設Tomcat端口為8080
# Windows
netstat -ano | findstr :8080
<PID>為Tomcat進程ID):# Linux
sudo jmap -heap <PID>
# Windows
jmap -heap <PID>
輸出中需包含配置的-Xms、-Xmx等參數值。-XX:MetaspaceSize和-XX:MaxMetaspaceSize替代-XX:PermSize和-XX:MaxPermSize;-XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:/path/to/gc.log),監控GC情況,進一步優化內存配置。