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

Java StackOverflowError 排查:log4j 日期格式化遞歸調用

     編輯:程式設計疑難解答

異常堆棧分析

Exception in thread "main" java.lang.StackOverflowError
    at java.text.DecimalFormat.subformat(DecimalFormat.java:903)
    at java.text.SimpleDateFormat.format(SimpleDateFormat.java:978)
    at org.apache.log4j.helpers.PatternParser$DatePatternConverter.convert(PatternParser.java:443)
    ...

根本原因

日誌配置中 PatternLayout 的日期格式模式導致 SimpleDateFormat 內部遞歸調用,常見於自定義日期格式包含遞歸引用,或多線程並發格式化時共享非線程安全的 SimpleDateFormat 實例。

解決方案

  1. 檢查 log4j 配置:確保 ConversionPattern 中日期格式正確,避免嵌套模式。
  2. 使用線程安全格式化:log4j 2.x 已修復,若用 1.x 可改用 ThreadLocal 或升級。
  3. 增加 JVM 棧大小(治標):-Xss2m 或 -XX:MaxDirectMemorySize=256m。
  4. 排查業務代碼遞歸:確認無無限遞歸邏輯(如 toString 互調)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved