系列文章目录
前言
平时,日志之于系统就像空气之于生物一样,平时不怎么关注,但是对于排查问题确跟关键。但是小小的日志也会影响系统性能?大部分同学可能觉得,日志组件已经经过了这么多年的使用和迭代,怎么可能出现性能瓶颈呢。这可不一定,且看我遇到的一个问题。
一、问题描述
系统在平常的低流量情况下运行的时候,完全没有问题,响应也很快。但是在做营销活动的时候,流量突增,在这种情况下,就会出现大量的慢响应请求。而且慢响应请求的数量随着时间成正态分布的样子。
二、问题分析
刚开始完全没有向日志方向考虑,而是分析哪个服务出现的超时比较多,先对类静态数据进行缓存处理。但是做了缓存之后系统依旧没有好转。然后对线程池进行扩大处理,但是还是不能解决问题。最后才怀疑到是不是打印日志的某个环节出现了问题。经过check,发现日志的打印方式是同步的方式。
线下通过同步方式打印和异步方式打印两种情况进行测试。
400个线程,轮询10次
同步:
可以看到,同步方式,请求响应时间大于500ms的请求日志量就占比一大半。
下面看同样条件下,异步方式的结果
异步方式,响应时间大于100ms的请求也只有34个。
可以得出结论,同步打印日志的方式会严重影响系统的性能
总结
有时候,你认为最安全的地方就是最危险的地方,保持怀疑精神和敢于怀疑精神,或许会直中要害。后续文章会对日志组件进行分析,剖析出同步打印方式的阻塞点。