使用 Spring 和 Log4j2 的 Classloader-Leak (Classloader-Leak with Spring and Log4j2)


問題描述

使用 Spring 和 Log4j2 的 Classloader‑Leak (Classloader‑Leak with Spring and Log4j2)

我正面臨一個類加載器洩漏,我能夠在一個只有兩個類和幾行代碼的小項目中重新生成它。只要使用記錄器 (Log4j2),就會發生這種情況。

問題: 多次部署應用程序時,類會一次又一次地加載,直到 PermGen 空間達到其限制. 查看 JVisualVM 的屏幕截圖

重現步驟: 下載這個包含兩個類的小型 Maven 項目。如下所示。

  • 在標準 tomcat 7 上部署應用程序
  • 啟動 jvisualvm 並監控 tomcat 實例
  • 取消部署應用程序
  • 再次部署應用程序...即使您點擊“執行 gc”按鈕,類也不會被刪除。

我已經嘗試過但沒有成功:

  • 在非靜態字段中使用記錄器
  • 使用“‑XX:+CMSClassUnloadingEnabled ‑XX:+UseConcMarkSweepGC”啟動虛擬機
  • 在 Spring bean 中定義記錄器

你有什麼想法,如何解決這個問題?提前致謝!


參考解法

方法 1:

There are a number of known memory leak issues with log4j version 2.4 and 2.4.1. The upcoming version log4j‑2.5 will address all of these.

(by ChristianRemko Popma)

參考文件

  1. Classloader‑Leak with Spring and Log4j2 (CC BY‑SA 2.5/3.0/4.0)

#log4j2 #log4j #spring #memory-leaks






相關問題

Làm cách nào để thêm phần phụ Log4J2 vào thời gian chạy theo chương trình? (How to add Log4J2 appenders at runtime programmatically?)

使用 Spring 和 Log4j2 的 Classloader-Leak (Classloader-Leak with Spring and Log4j2)

log4j2 RolllingFileAppender filePattern 創建日期錯誤 (log4j2 RolllingFileAppender filePattern create a wrong date)

將時間戳添加到日誌文件名時出錯 (log4j2) (Error adding timestamp to log file name (log4j2))

log4j2 - 以編程方式更改 RollingFileAppender 的最大文件大小 (log4j2 - programmatically change max file size of RollingFileAppender)

log4j 沒有登錄到文件或控制台 (log4j is not logging into file or console)

Log4j2 未在 Linux 中使用 Spring Boot 創建日誌文件 (Log4j2 not creating log file with Spring Boot in Linux)

application.properties 中的外部 log4j2.xml 文件路徑 (External log4j2.xml file path in application.properties)

使用 Spring 的依賴於配置文件的 log4j2 配置 (Profile-dependent log4j2 configuration with Spring)

從 log4j2.xml 訪問環境變量 (Accessing environment variable from log4j2.xml)

Spring Boot 應用程序中的內部 tomcat 停止響應調用 (internal tomcat inside spring boot application stops responding to calls)

如何在 mule 應用程序中實現 log4j2 (2.14.0) 'JSON 模板佈局'? (How can I implement log4j2 (2.14.0) 'JSON Template Layout' in a mule application?)







留言討論