Go 1.5的性能下降

Go 1.5的性能下降,go,Go,一段时间以来,我们一直在考虑为我们的生产服务器切换到Go 1.5。我们上次尝试时,它还是在Go1.5发布时,但我们发现它的性能有了很大的下降,所以我们决定暂缓。我们决定再次尝试Go 1.5(1.5.2),再次看到同样的性能下降。每当我们切换到Go 1.5,我们的超时时间就会显著增加。服务器每秒处理约30-40k个请求,负载约为2KB。服务器基本上是解组JSON有效负载->将数据重组为另一个结构->将数据编组为JSON。处理过程非常简单,但分配量很大(请求+JSON取消/编组)。以下是我们部署Go

一段时间以来,我们一直在考虑为我们的生产服务器切换到Go 1.5。我们上次尝试时,它还是在Go1.5发布时,但我们发现它的性能有了很大的下降,所以我们决定暂缓。我们决定再次尝试Go 1.5(1.5.2),再次看到同样的性能下降。每当我们切换到Go 1.5,我们的超时时间就会显著增加。服务器每秒处理约30-40k个请求,负载约为2KB。服务器基本上是解组JSON有效负载->将数据重组为另一个结构->将数据编组为JSON。处理过程非常简单,但分配量很大(请求+JSON取消/编组)。以下是我们部署Go 1.5时看到的统计数据

编辑:上面两个图都表示Y轴上的平均请求数


当我们切换到Go 1.5时,是否存在错误?还是预期性能会下降?或者,我们是否需要使用Go 1.5调整某些设置?

如果不知道Y轴的含义,这些图表就没有多大帮助,另请参见1.5中有关性能的一些说明。新的GC用一些吞吐量换取延迟。@nuss.justin:很抱歉。我应该说它们代表每秒的请求数。第一个图是每秒接收的请求数,第二个图表示每秒的平均超时数。因为您说您的应用程序分配很重,而1.5表示性能降级,所以它很可能与新的GC有关。您可以尝试使GC的攻击性降低一点,例如
GOGC=400
。GC统计数据可能也很有用,有了
GODEBUG=gctrace=1
。同时检查GOMAXPROCS,因为默认设置在go1.5中已更改。这个主题在go邮件列表中更合适(这里没有真正与编程相关的问题),完全有可能写障碍和帮助会导致比以前暂停更多的超时。其他可能有帮助的数据(此处或列表上):超时是什么,新旧GC暂停统计数据和延迟直方图。有两件事你可以玩:设置GOGC高,使用runtime.GC()每隔一段时间强制STW GCs,或者尝试许多较小的进程。如果不知道Y轴的含义,这些图就没有多大帮助,另请参见1.5中有关性能的一些注释。新的GC用一些吞吐量换取延迟。@nuss.justin:很抱歉。我应该说它们代表每秒的请求数。第一个图是每秒接收的请求数,第二个图表示每秒的平均超时数。因为您说您的应用程序分配很重,而1.5表示性能降级,所以它很可能与新的GC有关。您可以尝试使GC的攻击性降低一点,例如
GOGC=400
。GC统计数据可能也很有用,有了
GODEBUG=gctrace=1
。同时检查GOMAXPROCS,因为默认设置在go1.5中已更改。这个主题在go邮件列表中更合适(这里没有真正与编程相关的问题),完全有可能写障碍和帮助会导致比以前暂停更多的超时。其他可能有帮助的数据(此处或列表上):超时是什么,新旧GC暂停统计数据和延迟直方图。您可以使用两种方法:设置GOGC高,使用runtime.GC()每隔一段时间强制STW GCs,或者尝试许多较小的进程。