> > If it's true that some goroutines are simply looping, then the only > way to get their current PC is to crash the program with SIGQUIT and > look at the stack trace. The runtime doesn't have any way to ask a > goroutine what the currently executing PC is.
I suggest using pstack to capture the stacks of all threads of you can. > Because it is external ut is not subject to the stopping bias of the > internal go facilities. Thanks for the suggestions. I'll set up something external that sends sigquit during the stall and add an external gstack in a loop. On Tue, Aug 27, 2019 at 7:30 AM Robert Engels <reng...@ix.netcom.com> wrote: > I suggest using pstack to capture the stacks of all threads of you can. > Because it is external ut is not subject to the stopping bias of the > internal go facilities. > > > On Aug 27, 2019, at 9:05 AM, Ian Lance Taylor <i...@golang.org> wrote: > > > >> On Mon, Aug 26, 2019 at 2:12 PM Michael Andersen <mich...@steelcode.com> > wrote: > >> > >> I was concerned that perhaps the stacks that I dumped after the > scheduling stall did not reflect the actual PC's of the goroutines during > the stall, so I modified schedtrace to dump out g.sched.pc and g.m.vdsoPC > for each G currently on the P at the time schedtrace prints. > >> > >> It just occurred again a few minutes ago. Previously, all the P's were > running the problematic code, so other things weren't scheduled. This time > it appears that only a few P's (4 of 8) were running the problematic code > but the GC was trying to stop the world so even though there are P's with > nothing on them, nothing else ran. All the PC's on the problematic > goroutines (those with status=_Prunning) were static for the 3 seconds they > stalled. They all had the same PC's: > >> > >> g.sched.pc was 0x43389f which maps to: Line 302 of > "/usr/local/go/src/runtime/proc.go" starts at address 0x43389f > <runtime.gopark+239> and ends at 0x4338b7 <runtime.gopark+263>. > >> g.m.vdsoPC was 0x450c68 which maps to: Line 17 of > "/usr/local/go/src/runtime/timestub.go" starts at address 0x450c63 > <time.now+51> and ends at 0x450c8d <time.now+93>. > >> > >> In case there is more useful information that I missed, I attached the > log output. > > > > g.sched.pc doesn't tell us much about the current state. It tells us > > the PC value of the goroutine the last time the goroutine blocked. > > What you are seeing is that goroutine's block in gopark. That is not > > surprising. What we don't know is what the goroutine is currently > > doing. Similarly, vdsoPC tells us the PC value the last time the > > goroutine went into a VDSO call. Having that be time.now is not > > surprising. It doesn't tell us anything about what the goroutine is > > doing now. Also note that vdsoPC is only meaningful if vdsoSP != 0. > > > > > >> I'm trying to make a simpler program that reproduces this, but thus far > running time.Now in a tight loop across multiple goroutines isn't causing > it. Any ideas what I could try next? > > > > If it's true that some goroutines are simply looping, then the only > > way to get their current PC is to crash the program with SIGQUIT and > > look at the stack trace. The runtime doesn't have any way to ask a > > goroutine what the currently executing PC is. > > > > Ian > > > > -- > > You received this message because you are subscribed to the Google > Groups "golang-nuts" group. > > To unsubscribe from this group and stop receiving emails from it, send > an email to golang-nuts+unsubscr...@googlegroups.com. > > To view this discussion on the web visit > https://groups.google.com/d/msgid/golang-nuts/CAOyqgcU1pvzbun3488exV%3D%2BhTauSxd8JpBh0Oo76inVafHu-rA%40mail.gmail.com > . > > -- You received this message because you are subscribed to the Google Groups "golang-nuts" group. To unsubscribe from this group and stop receiving emails from it, send an email to golang-nuts+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/golang-nuts/CAPLpPrv-V6EQUBPVoGb%2BrP9TtGzFDwpu6ZfOP-26OUspkWJGVQ%40mail.gmail.com.