Golang app-engine性能参数

时间:2015-03-20 09:09:21

标签: performance google-app-engine go

在golang app-engine项目中使用现成的配置,我的表现非常令人失望。关于我可能遗失的任何提示?如何优化golang谷歌应用程序?

发送几十个请求,同时发送不超过六个,我发现只有一个实例处理所有请求,在一个实例上同时(不是顺序)多达六个请求 - 我希望最多可以看到六个实例。可能因此,事情似乎在阻塞。我看到很多超时,即使是像blobstore.Create()这样的管理功能,在单独发送和处理请求时也没有发生。

EDIT1:这三行



context.Infof("Sending request to blobstore to create %s as %s", Name, MimeType)
blobWriter, err := blobstore.Create(context, MimeType)
if err!=nil {
	context.Warningf("Unable to access content store: %v",err)
}



 正在生产:

I 12:47:36.201 Sending request to blobstore to create download.jpg as application/octet-stream
W 12:47:41.251 Unable to access content store: Canceled: Deadline exceeded (timeout)

在这里失败时,blobstore.Create总是大约五秒钟(通过时几毫秒)。超时也发生在blobstore.Write和blobstore.Close和数据存储区中,但延迟时间为20到30秒。 --End EDIT1。

似乎还存在性能问题。有一个计算密集的位,在我的家用机器(1.7GHz)上花了将近一秒钟完成。根据记录的时间戳,在远程app-engine(600MHz)上运行的相同代码平均花费超过30秒,最多109秒。这看起来不对!

EDIT2:计算密集度最高的位使用了resize函数: https://code.google.com/p/appengine-go/source/browse/example/moustachio/resize/resize.go (有明显的错误修复)。不是最有效的缩放器,但现在在一个独立的应用程序中足够快。但是它在appengine中运行速度要慢一个数量级(本地SDK版本1.9或在Google服务器上运行)。也许Google的图像库版本较慢?可能是图书馆? - 递归的斐波纳契计算在外部的同时在外部运行(与C代码相同的数量级)。 ---结束EDIT2

有关如何使谷歌应用程序性能更类似于多线程独立应用程序的任何提示?到目前为止,这些初步的缩放实验一直是一个悲惨的失败!

更新:使用runtime.GOMAXPROCS(6),最多6个并发请求,没有产生可测量的差异。使用" manual_scaling"对于请求有用的更多实例,请求通常会分配给不同的实例,但有时不会 - 导致问题。

部分解决方案:在单独的模块上分离计算密集型请求,在不同的实例上运行,这样它们就不会阻止更小的时间敏感请求。接下来,将较大的函数分解为几个较小的请求,以便几个可以同时运行"同时"在没有超时的同一个实例上? (让客户端发送多个请求来完成一项工作!)

如果我可以要求appengine只为每个请求启动新实例,那将会好得多。实验上,启动一个新实例要比在一个实例上以慢动作运行两个请求便宜得多。

0 个答案:

没有答案