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

2022-08-29 10:25:08 +08:00
 AugOmin

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

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

hook 是 lumberjack

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

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

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

1366 次点击
所在节点    Go 编程语言
5 条回复
seers
2022-08-29 10:33:31 +08:00
给 stdout 套一层 bufio
registerrr
2022-08-29 10:48:42 +08:00
Windows cmd 的打印输出性能贼差,之前写过一个下载小工具,在控制台中打印更新下载进度条,可以理解为疯狂在控制台里 print 。
同样的程序在 Windows cmd 下和 git bash 下运行,运行时长差了几十倍。
AugOmin
2022-08-29 10:58:05 +08:00
@seers 别说 bufio 了,我连 channel + bufio 都加上了还是搞不定,日志吞吐量上来了,压测模拟器的 CPU 都跑炸了
hez2010
2022-08-30 01:31:39 +08:00
可能是老的 conhost 的问题,为了兼容旧的行为,每行输出时都会加锁来做同步。
你可以试试在 Windows Terminal 下运行,这个有全新的 conhost 实现,性能应该会有显著提升。
sardina
2022-08-30 10:28:49 +08:00
楼上+1

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/876114

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX