堆栈跟踪中指定的时间是什么意思?

问题描述

我正在读取 go 程序的堆栈跟踪以进行调试。

goroutine 6 [chan receive]:
go.elastic.co/apm.(*Tracer).loop.func2(0xc000042420,0xc0000423c0,0x1551980,0xc0004da100,0xc000074300,0xc000001080,0xc00000e018)
    /app/vendor/go.elastic.co/apm/tracer.go:803 +0x21a
created by go.elastic.co/apm.(*Tracer).loop
    /app/vendor/go.elastic.co/apm/tracer.go:800 +0x36e

goroutine 8 [chan receive,21 minutes]:
github.com/getsentry/sentry-go.(*HTTPTransport).worker(0xc0003025b0)
    /app/vendor/github.com/getsentry/sentry-go/transport.go:387 +0x77
created by github.com/getsentry/sentry-go.(*HTTPTransport).Configure.func1
    /app/vendor/github.com/getsentry/sentry-go/transport.go:255 +0x3e

时间 21 minutes 在第二个 go 例程中代表什么?这次没有第一​​次。我查了一下文档,但没找到这个时间是干什么用的。

解决方法

这是 goroutine 被阻塞的大致时间。只有当goroutine被阻塞的时间至少为1分钟时才会显示。

您可以在 go 运行时源代码 runtime/traceback.go 中查看生成此输出的代码(链接的是代码的 go1.16.6 版本)。