Logback日志输出踩坑记

Posted 幸福遇见_1993

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Logback日志输出踩坑记相关的知识,希望对你有一定的参考价值。

项目场景:

本人在一家电车充电应用类服务新能源公司上班,是一名程序媛。随着疫情的解封,油价的上涨,电车已经成为当今社会大趋势,在我公司平台上日充电订单量达到四五十万单。


问题描述

近日在上午十点左右、夜里十一点左右,这两个时间段频繁接收日志监控系统的接口响应超时告警信息,过了这两个充电高峰期后,又恢复正常。针对这种接口超时情况,进行问题排查。

  • 问题定位一:
    分析日志异常信息,从异常信息找出原因
  • 问题定位二:
    排查是否存在查库操作,是否由于慢sql影响接口性能。
  • 问题定位三:
    排查超时接口中系统调用链路,定位是否由于调用三方接口响应超时导致该接口整体响应时间延长。

原因分析:

参考以上问题定位思路,逐步攻克,通过日志平台分析,访问调用时出现hsf 线程池满情况,hsf默认配置720个线程,当请求量过大则会出现线程池满,当前系统配置允许情况下,调整hsf线程数为900,机器重启,观察几日。

貌似问题好像解决了…但在高峰期偶尔还是会出现超时现象,问题依旧存在,按照上次的思路再继续排查,梳理代码排查是否由于慢sql影响性能,执行explain 执行计划,查询数据走索引,响应时间快。在继续梳理调用链路,可能由于调用三方接口,响应时间过长,需要三方接口优化,在进行沟通后,三方接口几乎是在十几毫秒返回,但发现很奇怪的现象,请求时间和三方接口接收到请求时间相差5s,即使三方接口在十几毫秒内返回,但总响应时间大于接口设置的超时时间2s,需要进一步定位问题,为啥三方接口在5s后才接收到请求。

根据代码分析此处并无复杂业务逻辑,因为日志输出耗时长。
因为日志打印到控制台及同步输出到文件,日志输出到控制台及同步输出到文件时,必须独占,因此,并发线程数越多,输出的日志行数越多,越容易形成阻塞,同时还会造成CPU使用率飙升。


解决方案:

将同步输入日志方式调整为异步方式输出,线上环境日志输出只进行输出到文件,不输出到控制台

进行压测

发现问题并进行深入分析

以上是关于Logback日志输出踩坑记的主要内容,如果未能解决你的问题,请参考以下文章

踩坑记SpringBoot使用Logback

记一次log4j不打印日志的踩坑记

Groovy踩坑记之方法调用八层认识

在VSCode写.netCore 踩坑记三(log4net日志配置)

ZOOKEEPER重连失败BUG踩坑记

rsyslog磁盘辅助(Disk-Assisted)模式踩坑记