Hi all,

Under what circumstances could I expect the Go GC time per pause (right now 
calculated using PauseTotalNS / NumGC using the runtime stats) creep up 
slowly over time?

Assuming the number of allocations we do per second is consistent, could it 
be that the GC is somehow not keeping up with our allocations? I'm not 
familiar enough with the GC internals (yet) to know if this is even 
possible.

For example, if we allocate 10k things, is it possible that only 8k of 
those things are collected, and then next cycle it'll have 12k things to 
clean up? (numbers used as examples only)

I don't believe there is a memory leak because our memory utilization (as 
reported by Go runtime and the system) is steady after a warmup period.

Our situation:

- go version go1.7.4 linux/amd64
- HTTP Server with timeouts configured serving JSON post requests and JSON 
responses on most endpoints (2 endpoints serving protobuf 
requests/responses)
- 30-40k QPS per node with an approximately consistent number of 
allocations per request. 
- We are seeing the GC time per pause creep up slowly over over 24 hours. 
- The rate at which the GC time increases over time is like clockwork 
(3.5ms per pause to 6.5ms per pause).
- The rate continues to increase after that, but we restart the process 
daily which immediately resolves the problem.
- HTTP Response times, as measured from the beginning of ServeHTTP to the 
end, increase directly with the increase in GC pause time (We go from 2.5ms 
mean response time to 8ms mean response time over 24 hours).
- We have several nodes that handle only 15-20k QPS that either don't 
experience this problem, or the creep is so slow as to be not noticeable 
(as in we deploy frequently enough that the issue never becomes apparent).

We're doing what we can to reduce allocations, which has had a significant 
impact (we used to go from 6ms mean to 15ms mean in 24 hours); however, no 
matter what we do we can't end the creep. We've run servers for several 
days and the response time and GC time per pause continues to go up until 
the response times are unacceptable and we must restart the process. 

Thank you!

Evan



-- 
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