You could be experiencing https://github.com/golang/go/issues/16293.
You can test this hypothesis by patching in the fix (https://github.com/golang/go/commit/cf4f1d07a189125a8774a923a3259126599e942b) yourself. That change will be released with Go 1.8. -Caleb On Fri, Sep 23, 2016 at 8:32 AM, zviad via golang-nuts <golang-nuts@googlegroups.com> wrote: > 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. -- 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.