Linux環境下Tomcat內存溢出可按以下步驟解決:
調整JVM內存參數
修改catalina.sh
(或setenv.sh
),增加堆內存大?。?code>-Xms和-Xmx
),建議設為物理內存的70%-80%,且-Xms
和-Xmx
保持一致以避免動態調整開銷。
-XX:PermSize
和-XX:MaxPermSize
(元空間),Java 8+使用-XX:MaxMetaspaceSize
。export JAVA_OPTS="-Xms1024m -Xmx2048m -XX:MaxMetaspaceSize=512m"
。優化垃圾回收策略
選擇合適的GC算法,如G1(適合大內存應用),可通過-XX:+UseG1GC
參數啟用,并調整相關參數(如-XX:MaxGCPauseMillis
)。
排查內存泄漏
-XX:+HeapDumpOnOutOfMemoryError
參數在內存溢出時自動生成堆轉儲文件,使用VisualVM
或Eclipse MAT
分析泄漏對象。調整線程池配置
修改conf/server.xml
中Connector
的maxThreads
參數,根據負載調整線程數,避免線程過多導致內存耗盡。
系統層面優化
/etc/security/limits.conf
,提升tomcat
用戶的nofile
限制。其他措施
關鍵工具:jmap
(生成堆轉儲)、jvisualvm
/MAT
(分析內存)、top
/jstat
(監控資源使用)。
參考來源: