Tomcat 進程仍存活,但 Web 頁面無回應。檢查日誌 logs/localhost.yyyy-mm-dd.log 發現大量 java.lang.OutOfMemoryError: Java heap space。
at com.jiuxing.website.control.Control.service(Control.java:54)
at org.tuckey.web.filters.urlrewrite.UrlRewriteFilter.doFilter(UrlRewriteFilter.java:728)
at com.jiuxing.website.filters.SetCharacterEncodingFilter.doFilter(...)
錯誤發生於 Servlet 轉發與過濾器鏈,提示 Heap 空間耗盡。
編輯 bin/catalina.sh (Linux) 或 bin/catalina.bat (Windows),調整 JAVA_OPTS:
# 原設定
JAVA_OPTS="-Xms512m -Xmx512m ..."
# 修改為
JAVA_OPTS="-Xms1024m -Xmx1024m ..."
# 或針對 64 位 JVM 可再調大,如 -Xmx2048m / -Xmx4096m
重啟 Tomcat 生效:./shutdown.sh && ./startup.sh。
| 可能原因 | 排查與解決 |
|---|---|
| 記憶體洩漏 | 用 jmap -histo:live pid、jhat、Eclipse MAT 分析 Heap Dump,找出未釋放物件(如靜態集合、ThreadLocal、連線池洩漏)。 |
| 單次請求佔用過大 | 檢查大報表匯出、大檔案上傳、Base64 編碼大圖片等場景,改用串流處理、分頁查詢。 |
| 連線池/執行緒池配置過大 | 調整 server.xml maxThreads、資料庫連線池 maxActive,避免同時佔用過多 Heap。 |
| PermGen / Metaspace 耗盡 | JDK 8+ 關注 MaxMetaspaceSize;大量動態類載入 (JSP、Spring CGLIB) 需調大。 |
| GC 策略不當 | 觀察 GC 日誌 (-Xlog:gc*),調整新生代/老年代比例、切換 G1/ZGC 等低延遲收集器。 |
java.lang:type=Memory 指標。-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/path。調大 -Xmx 只能暫時緩解,必須結合 Heap Dump 分析、程式碼審查、GC 調優 才能徹底解決 OOM。建議建立「監控 → 告警 → 分析 → 修復 → 驗證」閉環機制。
安裝 Xen 後黑畫面解決方案:單用戶模式修改 runlevel 與驅動安裝
解決 Nginx 啟動需輸入 SSL 私鑰密碼:生成無密碼私鑰實現自動化部署
IDE 硬碟資料傳輸模式演進:PIO、DMA 到 Ultra DMA
CentOS 一鍵安裝 Nginx 腳本實戰:依賴、編譯、配置與服務註冊全自動化
Nagios 插件執行報錯:缺少 sysstat 套件導致 check_cpu.sh 失效的解決方案
FPGA 時鐘沿採樣機制深度解析:非阻塞賦值、時序模擬與 Setup/Hold 實戰
Linux Input 子系統核心架構解析:input_dev、input_handler、input_handle 三角關係