V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
AugOmin
V2EX  ›  Go 编程语言

关于打包到 window 下运行,在控制台打日志,导致卡顿的问题

  •  
  •   AugOmin · 2022-08-29 10:25:08 +08:00 · 1354 次点击
    这是一个创建于 599 天前的主题,其中的信息可能已经有所发展或是发生改变。

    配置没有什么,就是简单的控制台和文件双写

    zapcore.NewMultiWriteSyncer(zapcore.AddSync(os.Stdout),zapcore.AddSync(&hook))
    

    hook 是 lumberjack

    只要请求量一大,就开始卡顿,Goroutine 快速增加,而且看起来都是卡在 writeConsole

    对比测试,只输出 os.Stdout 和 写入文件,也是控制台有问题,流量一大就开始卡顿

    现在在生产环境关掉 os.Stdout 的写入已经解决了问题,不过我好奇为什么会这么卡,之前在 linux 下开 docker 不也是输入到 os.Stdout,并没有这个问题

    5 条回复    2022-08-30 10:28:49 +08:00
    seers
        1
    seers  
       2022-08-29 10:33:31 +08:00 via Android
    给 stdout 套一层 bufio
    registerrr
        2
    registerrr  
       2022-08-29 10:48:42 +08:00
    Windows cmd 的打印输出性能贼差,之前写过一个下载小工具,在控制台中打印更新下载进度条,可以理解为疯狂在控制台里 print 。
    同样的程序在 Windows cmd 下和 git bash 下运行,运行时长差了几十倍。
    AugOmin
        3
    AugOmin  
    OP
       2022-08-29 10:58:05 +08:00
    @seers 别说 bufio 了,我连 channel + bufio 都加上了还是搞不定,日志吞吐量上来了,压测模拟器的 CPU 都跑炸了
    hez2010
        4
    hez2010  
       2022-08-30 01:31:39 +08:00 via Android
    可能是老的 conhost 的问题,为了兼容旧的行为,每行输出时都会加锁来做同步。
    你可以试试在 Windows Terminal 下运行,这个有全新的 conhost 实现,性能应该会有显著提升。
    sardina
        5
    sardina  
       2022-08-30 10:28:49 +08:00
    楼上+1
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2857 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 42ms · UTC 14:30 · PVG 22:30 · LAX 07:30 · JFK 10:30
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.