Hello,
As subject says, I was wondering if it is possible for concurrent part of 
GC process to still stall program execution. And if there are certain type 
of
things that may still block.

I am wondering about this, because we see this behavior in production both 
with Go 1.5 and 1.6. 

Here is example of GODEBUG=gctrace=1 output of Go 1.5 program:
gc 27004 @74856.698s 1%: 0.66+115+0.15+0.27+8.1 ms clock, 5.3+115+0+47/0.016
/101+65 ms cpu, 272->277->144 MB, 279 MB goal, 8 P
gc 27005 @74859.536s 1%: 0.77+120+0.051+0.26+8.7 ms clock, 6.1+120+0+30/
0.011/117+69 ms cpu, 272->277->144 MB, 279 MB goal, 8 P
gc 27006 @74862.400s 1%: 0.92+118+0.15+0.26+7.8 ms clock, 7.3+118+0+29/0.008
/119+62 ms cpu, 272->276->144 MB, 279 MB goal, 8 P
gc 27007 @74864.392s 1%: 0.73+122+0.17+0.41+8.2 ms clock, 5.9+122+0+59/0/103
+66 ms cpu, 272->277->144 MB, 279 MB goal, 8 P
gc 27008 @74866.865s 1%: 0.72+117+0.064+0.19+7.8 ms clock, 5.7+117+0+35/
0.010/109+63 ms cpu, 272->277->144 MB, 279 MB goal, 8 P

Theoretically the STW part shouldn't exceed 10ms, however we definitely can 
get requests stall for 100-130ms.
To confirm this, I ran a very simple test against running process:
for x in xrange(1000000):
  t0 = time.time()
  c.perform("GET", "/noop_route")
  tdelta = time.time() - t0
  if tdelta > 0.02:
     print time.time(), "Large TDELTA:", tdelta

And saw output like this:
1468438989.77 Large TDELTA: 0.12552690506
1468438992.1 Large TDELTA: 0.137628078461
1468438994.33 Large TDELTA: 0.115905046463
1468438996.6 Large TDELTA: 0.143169164658
1468438998.83 Large TDELTA: 0.13204908371
1468439000.73 Large TDELTA: 0.10854101181


This matches GC cycles very closely, happens every ~3seconds and we see 
stalls of >100ms. Also note that the '/noop_route' just goes through GOLang 
standard http stack, there should be pretty much no extra or custom code in 
there. 
---------

We do see same behavior with Go 1.6 too (but overall GC times are lower, 
but still looks like things stall during concurrent phase too). Do you have 
any potential ideas what might be happening here? 

Thanks
-Zviad

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