当我查看我的Google App Engine/Java应用程序的Appstats图表时,我有时会看到RPC之间看似无法解释的时间差距。在随附的屏幕截图中,从for循环对MemcacheService.get的两次调用之间有近2秒的间隔。当我在本地运行代码时,不会出现此行为。当我的代码在 App Engine 云中运行时,如何调查此类异常的原因?
显然SO不会让我发布图像,所以这里有一个图表的链接:http://i.imgur.com/bbCXr.jpg
请记住,App Engine 是共享主机。 虽然它似乎没有接近超卖的共享VPS托管,但您仍然在运行其他站点的机器上。 如果另一个站点代码占用了一些资源,则可能会影响应用程序的性能。 我也不完全了解App Engine也有哪些资源是敏感的,像@Nick-Johnson这样的人会更能告诉你这些。 App Engine 的工作方式确实可以防止大多数常见问题。 当我查看该图表时,在我看来,它就像另一个应用程序抓住了机器的差距。
虽然 2 秒是一个异常长的时间,但像这样无法解释的差距通常归结为两个原因之一:应用代码或计划。
由于听起来不太可能在这两个调用之间执行 2 秒的处理工作,因此最可能的答案是计划:您的应用用完了其时间片,操作系统计划其他任务运行一段时间。