golang进程如何打印goroutine stack信息

CodeGeek · · 2748 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

非常遗憾的是,目前没有类似pstack/jstack的工具可以使用。

网上有一些办法,需要在源程序里面预先添加代码,例如debug.PrintStack(),然后外面触发信号,打印stack内容;可是现实情况下运行程序并没有这些专门为调试而设置的代码。
例如正常运行的程序,线上程序,突然死锁了,如何查看各个goroutine都在干什么呢?

目前我了解的唯一办法就是给进程发送SIGQUIT信号:
kill -SIGQUIT <pid>

go进程在收到SIGQUIT信号后,会往标准错误(stderr)打印出所有goroutine的stack信息。

但是遗憾的是,此时go进程也就退出了。
如果既想打印出所有gorouotine的stack,又不杀掉进程本身,好像没有办法唉。

另外pstack对于go进程根本不管用,pstack能打印出操作系统级别的thread信息,但是goroutine并没有和thread有对应关系,特别是GOMAXPROCS=1时,pstack只打印出一个线程的stack信息,没有任何goroutine的stack信息。


有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:CodeGeek

查看原文:golang进程如何打印goroutine stack信息

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

2748 次点击  
加入收藏 微博
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传