問題原因
日志打印??I/O 操作開銷?(如 Log4j 的 FileAppender)會阻塞業務線程,直到日志寫入完成,導致接口響應變慢
問題描述
- 在線上環境,客戶反饋導入一個不到1MB的excel文件,耗時將近5分鐘。
問題排查
-
發現日志文件有打印超多以下日志:
WARN DefaultAnalysisEventProcessor:41 - Empty row!
-
和客戶拿到文件分析后認定是客戶導入的文件中存在大量的空行。導致的上述日志瘋狂打印,每一行是空都會打印一條,導致接口耗時變慢。
-
源碼尋找,如圖:
-
發現這行日志打印需滿足日志等級是debug級別的才會打印。嗨,恰巧,由于項目年代久遠我司線上環境日志級別是debug,導致了上述問題的發生。
問題解決
修改日志級別為info 避免日志打印。
Log4j日志配置修改方法
log4j.logger.com.alibaba.excel.read.processor.DefaultAnalysisEventProcessor=INFO
spring boot項目,日志級別修改方式
logging:level:com.alibaba.excel.read.processor.DefaultAnalysisEventProcessor: INFO