gc 347 @6564.164s 0%: 0.89+518+1.0 ms clock, 28+3839/4091/3959+33 ms cpu,
23813->23979->12265 MB, 24423 MB goal, 32 P

What I'm seeing here is that you have 32 HW threads and you spend .89+518+1
or 520 ms wall clock in the GC. You also spend  28+3839+4091+3959+33 or
11950 ms CPU time out of total of 520*32 or 16640 available CPU cycles
while the GC is running. The GC will reserve 25% of the CPU to do its work.
That's 16640*.25 or 4160 ms. If the GC finds any of the remaining 24
threads idle it will aggressively enlist them to do GC work.

The graph only shows the 8 HW threads but not the other 24 so it is hard to
tell what is going on with them.

This may well be related to  issue 12812
<https://github.com/golang/go/issues/14812> so you might want to read that
thread for more insight.

On Wed, May 31, 2017 at 10:25 AM, Xun Liu <pas...@gmail.com> wrote:

> $ go version
>
> go version go1.8 linux/amd64
>
> On Wednesday, May 31, 2017 at 7:13:38 AM UTC-7, Ian Lance Taylor wrote:
>>
>> [ +rlh, austin ]
>>
>> Which version of Go are you running?
>>
>> Ian
>>
>> On Tue, May 30, 2017 at 10:01 PM, Xun Liu <pas...@gmail.com> wrote:
>>
>>> Hi, we see a clear correlation between GC and latency spike in our Go
>>> server. The server uses fairly large amount of memory (20G) and does mostly
>>> CPU work. The server runs on a beefy box with 32 cores and the load is
>>> pretty light (average CPU 20-30%).  GC kicks in once every 10-20 seconds
>>> and whenever it runs we observe pretty big latency spike ranging from 30%
>>> to 100% across p50-p90 percentiles (e.g. p90 can jump from 100-120ms to
>>> 160-250ms)
>>>
>>> I captured a trace of a gc and noticed the following:
>>>
>>> 1. user gorountines seem run longer during gc. This is through ad-hoc
>>> check. I don't really know how to get stats to confirm this.
>>> The gc log is as following (tiny pauses but is very aggressive in assist
>>> and idle time)
>>> gc 347 @6564.164s 0%: 0.89+518+1.0 ms clock, 28+3839/4091/3959+33 ms
>>> cpu, 23813->23979->12265 MB, 24423 MB goal, 32 P
>>>
>>> 2. during gc, goroutines can queue up. In this particular case there is
>>> a stretch of time (~20ms) where we see many goroutines are GCWaiting. See
>>> below -- the second row is goroutines with light grey indicating GCWaiting
>>> count and light green Runnable.
>>>
>>>
>>>
>>> <https://lh3.googleusercontent.com/-5NWj8HzrzyI/WS5Hg0c6WiI/AAAAAAAAqL8/_P-S9vXuGU0FVZV1tG_dHX-14tDHhTsnwCLcB/s1600/Screen%2BShot%2B2017-05-30%2Bat%2B9.32.27%2BPM.png>
>>>
>>>
>>> <https://lh3.googleusercontent.com/-EdVRp4FjhPw/WS5MjjiwdrI/AAAAAAAAqMM/vE5Srmu9e9A5MV0d50NpDiqFsFrkn-E-QCLcB/s1600/Screen%2BShot%2B2017-05-30%2Bat%2B9.54.06%2BPM.png>
>>>
>>> Any idea what's going on here? What can I do to reduce the spikes?
>>>
>>>
>>>
>>> --
>>> 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.
>>> 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