Thanks for getting back to me. I have posted the output from a 30-second 
runtime/trace session here, which appears to show three 80ms GC's:

https://www.dropbox.com/s/wc3hp6k17txaofh/staging-trace.tar.gz?dl=0

I'm struggling a bit to interpret what's there though.

On Thursday, February 23, 2017 at 7:46:42 PM UTC, Austin Clements wrote:
>
> AFAIK, the only thing that can cause this in Go 1.8 is a non-preemptible 
> loop. It's not related to the heap size at all.
>
> To test this theory, you can set GOEXPERIMENT=preemptibleloops and rebuild 
> your Go tree (the compiler has to be built with this, so you can't just 
> turn it on to build your project). I wouldn't recommend running in 
> production with this, but if it eliminates the long pauses, we'll at least 
> know that's the culprit.
>
> Since these are quite long, the other thing you can do is run with the 
> execution tracer (https://godoc.org/runtime/trace). You'll be able to see 
> exactly what's happening at the beginning of each GC cycle. If you do have 
> non-preemptible loops, you should also see goroutines executing for much 
> longer than 10ms at a time, which is the default preemption bound.
>
> On Thu, Feb 23, 2017 at 1:46 PM, Oliver Beattie <oli...@obeattie.com 
> <javascript:>> wrote:
>
>> I am looking for some advice about how I can debug some long GC pauses I 
>> am observing in our production workloads under go 1.8 (the problem is not 
>> specific to 1.8, though). This is a very simple network server – basically 
>> a HTTP ping endpoint – but I regularly see tail request latencies of 
>> >100ms. I have enabled GODEBUG=gctrace=1, and I can see some quite long 
>> STW pauses amid lots of much less worrying pauses:
>>
>> gc 54 @348.007s 0%: 0.061+81+0.040 ms clock, 0.12+0.39/81/81+0.081 ms 
>> cpu, 4->4->1 MB, 5 MB goal, 2 P
>> gc 55 @358.007s 0%: 0.21+83+0.019 ms clock, 0.43+80/2.7/81+0.039 ms cpu, 
>> 4->4->1 MB, 5 MB goal, 2 P
>> *gc 56 @367.507s 0%: 80+1.3+0.065 ms clock, 161+0.080/1.2/82+0.13 ms cpu, 
>> 4->4->1 MB, 5 MB goal, 2 P*
>> gc 57 @377.726s 0%: 0.054+63+0.023 ms clock, 0.10+0.68/61/0.44+0.046 ms 
>> cpu, 4->4->1 MB, 5 MB goal, 2 P
>> gc 58 @388.007s 0%: 0.033+81+0.036 ms clock, 0.067+0.32/80/81+0.072 ms 
>> cpu, 4->4->1 MB, 5 MB goal, 2 P
>> gc 59 @398.007s 0%: 0.021+82+0.019 ms clock, 0.043+0.17/80/82+0.038 ms 
>> cpu, 4->4->1 MB, 5 MB goal, 2 P
>> gc 60 @407.630s 0%: 0.012+57+0.031 ms clock, 0.025+0.25/0.64/57+0.063 ms 
>> cpu, 4->4->1 MB, 5 MB goal, 2 P
>> gc 61 @418.007s 0%: 0.19+1.0+79 ms clock, 0.38+0.28/0.69/0.98+159 ms cpu, 
>> 4->4->1 MB, 5 MB goal, 2 P
>> gc 62 @427.507s 0%: 0.21+81+0.29 ms clock, 0.42+81/0.96/81+0.58 ms cpu, 
>> 4->4->1 MB, 5 MB goal, 2 P
>> gc 63 @437.507s 0%: 0.015+81+0.053 ms clock, 0.031+0.29/0.98/80+0.10 ms 
>> cpu, 4->4->1 MB, 5 MB goal, 2 P
>> *gc 64 @443.507s 0%: 81+1.2+0.032 ms clock, 162+0.040/1.2/0.44+0.065 ms 
>> cpu, 4->4->1 MB, 5 MB goal, 2 P*
>> scvg2: inuse: 4, idle: 2, sys: 7, released: 0, consumed: 7 (MB)
>> gc 65 @453.507s 0%: 0.13+81+0.051 ms clock, 0.26+0.20/81/82+0.10 ms cpu, 
>> 4->4->1 MB, 5 MB goal, 2 P
>>
>> If I am reading this correctly, some of these STW pauses are 80+ 
>> milliseconds, in order to scan a minuscule heap. I am not experienced with 
>> debugging the GC in Go, so I'd appreciate any pointers as to why this could 
>> happening and what I can do to get to the bottom of the behaviour. Many 
>> thanks :)
>>
>> -- 
>> 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...@googlegroups.com <javascript:>.
>> For more options, visit https://groups.google.com/d/optout.
>>
>
>

-- 
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.
For more options, visit https://groups.google.com/d/optout.

Reply via email to