13

我为使用 Play 框架 1.x 并在 GAE 上运行的客户端开发了一个应用程序。该应用程序运行良好,但有时速度非常慢。加载简单页面大约需要 30 秒,但有时运行速度更快 - 没有任何代码更改。

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

你会如何处理这个问题?目前我的客户因为加载时间慢而非常生气,但目前是最后的选择。

4

4 回答 4

10

使用GAE Appstats来分析您的远程过程调用。所有的 RPC 都很慢(Google Cloud Storage,Google Cloud SQL,...),所以如果你可以减少 RPC 的数量或者可以使用一些缓存数据结构,使用它们 -> 你的应用程序会更快。但是您可以通过 appstats 查看哪些部分速度较慢以及是否需要注意 :)。

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

于 2013-03-04T18:31:55.540 回答
4

Google 通常不会为很多服务提供联系支持。所描述的关于谷歌应用引擎缓慢的问题可能是由冷启动引起的。Google 应用引擎前端实例在大约 15 分钟后休眠。您可以编写一个 cron 作业以每 14 分钟 ping 一次实例以保持节点正常运行。

于 2014-06-03T19:44:52.183 回答
2

结合一些答案并添加一些要检查的内容:

  1. 使用应用统计信息进行调试。寻找“阶梯式”情况和 RPC 调用。也许您的应用程序中的某些东西在您的逻辑中不会一直发生的某些点触发 RPC 调用。

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

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

  4. 您是否在前端服务器上运行任何类型的 cron 作业/处理?尝试尽可能多地转移到后台任务,例如发送电子邮件。间隔可能看起来是随机的,但它可能是根据您的工作设置发生的事情的结果。每天上午 9 点可能并不代表您的想法,具体取决于 cron/task 选项。一个必然结果 - 将事物移动到后端服务器并拉取队列。

如果没有更多信息,很难给你一个好的答案。这里的人能做的最好的事情就是给你一个起点,这里几乎每个答案都已经有了。

于 2014-03-16T07:06:21.167 回答
0

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

于 2013-03-06T18:17:32.450 回答