The goroutine dump /debug/pprof/goroutine can show you where things are blocked on a lock, but it can be much harder to figure out where the lock is held.
There is a blocking profile, but it must be enabled in code with runtime.SetBlockProfileRate(), and it records all events over a period. If I have a problem from blocking it will generally come up all the time, which is why a one-off dump is attractive.
(I'm assuming that, given an arbitrary lock, one can figure out something about where it is held. That may not be true)
The goroutine dump
/debug/pprof/goroutinecan show you where things are blocked on a lock, but it can be much harder to figure out where the lock is held.There is a blocking profile, but it must be enabled in code with
runtime.SetBlockProfileRate(), and it records all events over a period. If I have a problem from blocking it will generally come up all the time, which is why a one-off dump is attractive.(I'm assuming that, given an arbitrary lock, one can figure out something about where it is held. That may not be true)