如何 debug 超过 8192 个活跃的 goroutine

2018-05-19 08:06:36 +08:00
 wqlin
如题,程序中会不断的创建新的 goroutine,直到超过 8192 个。有没有什么办法得到当前活跃 goroutine 的信息,比如是谁创建这些 goroutine 的
2820 次点击
所在节点    Go 编程语言
17 条回复
susecjh
2018-05-19 08:09:19 +08:00
log
wqlin
2018-05-19 08:12:31 +08:00
@susecjh #1 怎么打 log,现在我只用 runtime.NumGoroutine() 打印出活跃的 goroutine 数量。从日志可以看到本来只有几百个的,然后不知道怎么的突然开始增大,一直增加到 8192 个。可以打印出更详细的信息吗
janxin
2018-05-19 08:17:29 +08:00
先看是不是自己创建的,自己创建的打 log 就能解决
janxin
2018-05-19 08:25:33 +08:00
还有一种方法是 dump goroutine stacktrace,具体方法网上搜一下就好了
wqlin
2018-05-19 08:31:54 +08:00
@janxin #4 了解,我去试试
EchoUtopia
2018-05-19 08:37:09 +08:00
goroutine 泄露
gamexg
2018-05-19 09:34:25 +08:00
http pprof ?
看看新创建的都在执行什么操作。
wspsxing
2018-05-19 10:24:59 +08:00
协程泄露吼啊
mengzhuo
2018-05-19 10:42:24 +08:00
运行中的 goroutine 在你 dump 的时候会有显示 "running" 的,不过你这个应该是没退出导致的泄漏
rcmerci
2018-05-19 13:20:00 +08:00
一般一下从几百个变到几千个,很有可能都是同一处 go func(){}产生出来的,然后泄露了把。dump 出来 goroutine stacktrace,然后看看是不是有大量相似的 goroutine,很有可能就找到原因了
wqlin
2018-05-19 13:26:46 +08:00
@mengzhuo 了解
wqlin
2018-05-19 13:26:54 +08:00
@rcmerci 好的,谢谢
zwh2698
2018-05-19 14:01:55 +08:00
该死的不死,新增的还在继续
fuxiaohei
2018-05-19 17:34:47 +08:00
一般开启 http/pprof 来看一下 goroutine 页面的打印,最多的 goroutine 都停在哪个位置就可以了
bigpigeon
2018-05-20 00:48:36 +08:00
runtime 包有个 NumGoroutine 可以获取当前 ctrip 的数量
bigpigeon
2018-05-20 00:57:53 +08:00
v2ex 写错了不能修改真的难受
hyuwang
2018-05-20 11:43:39 +08:00
grmon 了解一下?

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

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

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

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

© 2021 V2EX