2013-03-04 33 views
7

我开发了一个使用Play framework 1.x并在GAE上运行的客户端应用程序。该应用程序很好,但有时是疯狂的缓慢。加载简单页面大约需要30秒,但有时运行速度更快 - 无需更改任何代码。确定Google应用引擎缓慢的原因

有什么方法可以确定它运行缓慢的原因吗?我试图联系支持,但我找不到任何电话号码或电子邮件。谷歌官方也没有回应。

你会如何解决这个问题?目前我的客户非常生气,因为加载时间很慢,但切换到其他提供商是目前最后的选择。

+0

您对数据存储使用主/从或高复制吗? – 2013-03-04 14:52:25

+0

你好,我正在使用高复制 – FrEaKmAn 2013-03-04 14:59:04

+0

想知道 - 你在监测网站负载/ GC /计时你的代码 - 如果是这样,如何? – 2013-03-04 16:11:06

回答

0

这是付费应用程序吗?当您不支付应用程序时,这些实例的寿命很短。

+1

它是有偿的应用程序。这是我理解的慢启动,这是正常的。我正在谈论应用何时已在运行。 – FrEaKmAn 2013-03-04 22:54:19

+0

所以你的意思是在实例启动并加载后的第二个请求? 现在有多少个实例?只有一个,还是有更多?还要检查你有多少实例闲置。 – 2013-03-05 04:25:52

+0

我已将所有内容设置为自动,并让Google决定哪些内容最好。几次我检查,它运行4个实例.. – FrEaKmAn 2013-03-13 08:17:10

8

使用GAE Appstats来分析您的远程过程调用。所有RPC都很慢(Google Cloud Storage,Google Cloud SQL等),所以如果您可以减少RPC的数量或者可以使用某些缓存数据结构,请使用它们 - >您的应用程序将更快。但是你可以用appstats看到哪些部分很慢,如果他们需要注意的话:)。

例如,我为我的应用程序创建了Google Cloud Storage缓存,并将执行时间从2分钟缩短到30秒以下。 RPC是GAE的瓶颈。

0

通过使至少一个实例永久化,您在首次使用时会得到很大改进。它大约需要15秒。加载中实例的应用程序,这就是为什么你会遇到长时间的请求次数,当没有人使用的应用程序一段时间

+1

我知道启动时间。正如我所说的那样,它随机的时间间隔工作得很慢 – FrEaKmAn 2013-03-13 08:16:34

+0

你确定这不是因为一个新的实例正在启动。根据您在GAE控制台中的应用程序设置,实际上可能会对您的应用程序产生负面影响,具体取决于设置。关于这件事和文章已经有几次讨论,但我似乎无法马上找到它们。 您也可以使用预热请求。 – therewillbesnacks 2014-03-16 06:57:06

2

结合一些答案,并添加一些东西来检查过:

  1. 调试使用应用统计信息。寻找“阶梯”情况和RPC调用。也许你应用程序中的某些东西在某些时刻会触发RPC调用,而这些调用并不总是在你的逻辑中发生。

  2. 调整您的实例设置。添加一些永久/常驻实例,看看是否有所作为。如果你正在旋转新的实例,事情会变得很慢,大概在你描述的时间范围内(30秒或更长时间)。它看起来是随机的。这不仅仅是多少个实例,而是你使用的滑块的组合(你实际上可能会因为太少/太多而伤害自己)。

  3. 看看你的应用程序本身。你在JVM中做了很多内存分配吗?分配/释放内存本质上是一个缓慢的操作,可能会导致死机。你确定你的冻结不是JVM的问题吗?尝试在本地复制问题并调整JVM xmx和xms设置,并查看是否找到类似的行为。还可以在本地分析应用程序的内存/性能问题。您可以使用池,DI容器等减少分配。

  4. 您是否在前端服务器上运行任何类型的cron作业/处理?尝试尽可能地移动到后台任务,例如发送电子邮件。间隔可能看起来是随机的,但这可能是事情发生的结果,具体取决于您的工作设置。每天早上9点可能并不意味着你认为取决于cron /任务选项。一个必然结果 - 把事情转移到后端服务器和拉队列。

在没有更多信息的情况下给你一个很好的答案很难。这里最好的人能做的就是给你一个出发点,这里几乎每个答案都已经有了。

1

Google通常不会为大量服务提供联系支持。关于谷歌应用程序引擎缓慢的问题可能是由冷启动引起的。 Google应用引擎前端实例在大约15分钟后就会休眠。您可以编写一个cron作业,每14分钟对实例进行ping操作,以保持节点向上。