首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
weishao666
V2EX  ›  问与答

Logback 同步日志偶尔阻塞问题

  •  
  •   weishao666 · 198 天前 · 711 次点击
    这是一个创建于 198 天前的主题,其中的信息可能已经有所发展或是发生改变。

    Logback 同步方式打的日志,在生产环境上接口的调用响应时间,偶发性的出现超过 2s 的情况。 在测试环境上起一个接口,接口简单地就只执行 log 一个字符串的功能。模拟压测,50 个线程连续压一分钟,就能复现问题,卡点在两个方面:

    1. 在 Logback 底层实现中最后写文件是用到 BufferedOutputStream 的 flush 方法,写文件一般都挺快,可每隔几秒钟就会出现几次需要秒级才能完成的情况,慢的时候可以达 3-4s
    2. 同步方式写文件,Logback 源码中在写日志文件之前,会持有一个 ReentrantLock,那这种情况下前面持有锁的线程阻塞在写文件步骤了,其他的线程也就进不来了

    基础知识不牢固,不知道怎么从 IO 层面去分析这个问题,想请假一下 V 友,如果说我云服务器的配置是 2 核 4G,磁盘是普通的云盘,为何会出现这种断续的耗时比较长的情况呢?是我磁盘的写入速率就这么高么?不至于吧,持有锁的线程就一个,写一个字符串能有多大?

    还是说我其实还有一层,接口是跑在这个宿主机的容器里边,可能是容器层面什么配置设置得不合理?

    再或者说断续的写同一个文件,表现就是这样的,跟底层的类似于用户缓存区呀,内核缓存区啥的有关?

    卡好几天了,有了解的朋友望不吝赐教,感谢

    1 回复  |  直到 2019-07-15 20:38:27 +08:00
    weishao666
        1
    weishao666   198 天前
    我知道 Logback 有异步打日志的方式,并且效率相对优于同步,就是想搞明白,这里到底是怎么卡住了
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   803 人在线   最高记录 5168   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 27ms · UTC 20:50 · PVG 04:50 · LAX 12:50 · JFK 15:50
    ♥ Do have faith in what you're doing.