微服务性能优化-日志调优

来源:互联网 发布:搜狗 算法研究员 面试 编辑:程序博客网 时间:2024/06/04 00:32

A进程是提供接口给手机客户端调用,B进程是刚上的服务,A进程调用B进程的超时时间设置为3秒,超过3秒就报错,上报到监控系统。上线后收到短信告警,超时的请求量较多。查看监控图如下


纵座标的顶部是3秒,每隔一小时就有一个高峰达到3秒。刚开始怀疑B进程有定时任务在跑,查看代码后发现没有,最后查到运维人员在系统中跑定时任务,每小时检查log目录下的文件是否大于500M,是的话就切割文件压缩。文件的时间与监控图的超时时间一致。


怀疑是在操作系统定时任务切割日志文件的时候,与业务进程抢压日志文件资源,阻塞了业务进程IO。


由于B进程是个重要服务,开发人员为了方便定位问题,把每次的请求和返回数据都打开出来,请求量也较大,导致每小时内都达到500M。

做了以下优化:

1. 减少日志量,只记录关键信息到日志文件

2. 修改log4j配置

log4j.additivity.monitorLogger=false
设置监控logger的日志不会输出到rootlogger
log4j.appender.monitorAppender.BufferedIO=true
log4j.appender.monitorAppender.BufferSize=8192
设置log4j输出日志的时候采用缓冲的方式,而不是即时flush方式,并且设定了缓冲为8K,可以根据日志输出的情况来修改,不即时写入文件可以减少与定时任务冲突的概率。

 

log4j有个AsyncAppender选项可以设置为异步输出日志,这里不改为异步的原因,是因为B进程已经有100个线程,且并发量较大,在网上看到异步不移定。

优化完后,系统稳定,很少再收到告警短信,终于睡个好觉。

1 0
原创粉丝点击