打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
从一次服务器IO过高问题说到Log4j2的自动压缩配置
userphoto

2022.06.14 河南

关注

线上服务器遇到IO过高问题,造成线上业务严重卡顿。查明原因是运维做了一个压缩日志的脚本,每隔十分钟把未压缩的日志压缩一次,刚好当时一次压缩时间超过了十分钟,脚本也没有检查自己是否已经在执行,会新启动一个脚本再压缩,而两个并行的脚本会比之前更慢,会再超过十分钟,再新启动新的脚本,如此反复,一直到五十分钟后,并行压缩的多个脚本终于引发了IO过高,影响到了线上业务。

教训一,任何服务器脚本都需要检查自己是否已经在执行,避免重复执行。

教训二,如果有现成的很好的实现,不要重新发明轮子。

其实Log4j2已经实现了自动压缩日志的功能,只需要把归档日志的文件后缀名声明为.gz或者.zip。

建议配置为按时间和文件大小滚动,比如一小时和大小1GB,通过Log4j2压缩过大的文件同样会影响程序性能。

注意,滚动归档日志文件名一定要带%i参数,看到很多文档里没有说明这一点,会导致日志会被滚动覆盖。

Log4j2的配置:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <Configuration status="info" monitorInterval="600">
  3. <Properties>
  4. <Property name="LOG_PATTERN">%d{DEFAULT}|%level|%t|%c{40}|%msg%n%ex</Property>
  5. </Properties>
  6. <Appenders>
  7. <Console name="Console" target="SYSTEM_OUT">
  8. <PatternLayout>
  9. <Pattern>${LOG_PATTERN}</Pattern>
  10. </PatternLayout>
  11. </Console>
  12. <RollingRandomAccessFile name="File" fileName="log/gameserver.log"
  13. filePattern="log/gamelog/gameserver.%d{yyyyMMddHH}.%i.log.gz"
  14. immediateFlush="false"
  15. append="true">
  16. <PatternLayout>
  17. <Pattern>${LOG_PATTERN}</Pattern>
  18. </PatternLayout>
  19. <Policies>
  20. <TimeBasedTriggeringPolicy modulate="true" interval="1" />
  21. <SizeBasedTriggeringPolicy size="1000MB"/>
  22. </Policies>
  23. </RollingRandomAccessFile>
  24. </Appenders>
  25. <Loggers>
  26. <AsyncRoot level="info"
  27. includeLocation="true"
  28. additivity="false">
  29. <AppenderRef ref="Console"/>
  30. <AppenderRef ref="File"/>
  31. </AsyncRoot>
  32. </Loggers>
  33. </Configuration>

 

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
使用log4j2分离系统日志与业务日志
Log4j2
Springboot 日志、配置文件、接口数据如何脱敏?老鸟们都是这样玩的!
log4j的2.6.2版本properties配置文件的使用举例
IE9 console.log 脚本中断
LOG4J配置全接触
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服