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

Tomcat PermGen Space 內存溢出:調大 -XX:MaxPermSize 解決

     編輯:程式設計綜合問答

異常信息

java.lang.OutOfMemoryError: PermGen space

環境:Spring + Struts2 + MyBatis,Tomcat 7.x,MyEclipse 10。項目啟動時報錯。

原因

永久代 存放類元數據(Class、Method、常量池等)。熱部署/大量類加載/第三方庫多時,默認 64MB/82MB 易耗盡。
JDK 8+ 已移除永久代,改用 Metaspace,但 Tomcat 7 / JDK 7 仍存在此問題。

解決方案:調整 JVM 參數

-server -Xms256m -Xmx512m -XX:PermSize=64M -XX:MaxPermSize=512m

MyEclipse 配置路徑

  1. Window → Preferences → MyEclipse → Servers → Tomcat → Tomcat 7.x → JDK
  2. 在 Optional Java VM arguments 輸入上述參數。
  3. Apply → 重啟 Tomcat。

參數含義

參數含義建議值
-Xms堆初始大小256m~512m
-Xmx堆最大大小512m~2g (視物理內存)
-XX:PermSize永久代初始大小64M~128M
-XX:MaxPermSize永久代最大大小256M~512M+
-serverServer 模式 JIT 優化生產必加

進階排查(若調大仍 OOM)

  1. 類加載器洩漏:熱部署後舊類未卸載 → 用 jmap -histo:live pid / VisualVM 觀察類數量增長。
  2. 字符串常量池:大量 String.intern() / 常量池膨脹 → 改用對象池或升級 JDK 8+ (常量池移至堆)。
  3. 第三方庫掃描:掃描路徑過廣加載無用類 → 縮小掃描包範圍。

JDK 8+ 遷移提示

若升級 JDK 8,永久代參數失效,改用:

-XX:MetaspaceSize=64M -XX:MaxMetaspaceSize=512M

核心動作:**給永久代足夠空間 (-XX:MaxPermSize=512m)**,配合監控防洩漏,徹底解決啟動期 PermGen OOM。

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