我开发了一个使用Play framework 1.x并在GAE上运行的客户端应用程序。该应用程序运行良好,但有时是疯狂的慢。加载简单页面大约需要30秒,但有时它运行得更快 - 没有任何代码更改。
有没有办法确定为什么它运行缓慢?我试图联系支持,但我找不到任何电话号码或电子邮件。官方谷歌小组也没有回复。
你会如何解决这个问题?目前我的客户非常生气,因为加载时间很慢,但目前最后一种选择是切换到其他供应商。
答案 0 :(得分:8)
使用GAE Appstats配置远程过程调用。所有的RPC都很慢(谷歌云存储,谷歌云SQL,...),所以如果你可以减少RPC的数量或可以使用一些缓存数据结构,使用它们 - >你的申请会快得多。但你可以看到appstats哪些部分很慢,如果他们需要注意:)。
例如,我为我的应用程序创建了一个Google云端存储缓存,并将执行时间从2分钟减少到30秒。 RPC是GAE的瓶颈。
答案 1 :(得分:2)
结合一些答案并添加一些内容进行检查:
使用app stats进行调试。寻找"楼梯"情况和RPC调用。也许您的应用中的某些内容会在某些不会发生在您的逻辑中的点上触发RPC调用。
调整您的实例设置。添加一些永久/驻留实例,看看是否有所作为。如果你正在开辟新的实例,事情会很慢,可能在你描述的时间范围内(30秒或更长时间)。这似乎是随机的。它不仅仅是有多少个实例,而是你使用的滑块的组合(实际上你可以用太少/很多的东西伤害自己)。
查看您的应用程序本身。你在JVM中做了很多内存分配吗?分配/释放内存本质上是一个缓慢的操作,可能导致冻结。你确定你的冻结不是JVM问题吗?尝试在本地复制问题并调整JVM xmx和xms设置,看看是否发现了类似的行为。还可以在本地配置应用程序以查找内存/性能问题您可以使用池,DI容器等减少分配。
您是否在前端服务器上运行任何类型的cron作业/处理?尝试尽可能多地移动到后台任务,例如发送电子邮件。间隔可能看起来是随机的,但它可能是由于您的工作设置而发生的事情的结果。每天上午9点可能并不意味着你的想法取决于cron /任务选项。一个必然结果 - 将事物移到后端服务器并拉取队列。
如果没有更多信息,很难给出一个好的答案。这里最好的人就是给你一个起点,这里几乎每个答案都有。
答案 2 :(得分:1)
Google通常不会为很多服务提供联系支持。关于谷歌应用引擎缓慢的问题可能是由冷启动引起的。谷歌应用引擎前端实例大约15分钟后就会睡眠。您可以编写一个cron作业,每隔14分钟ping一次实例,以保持节点正常运行。
答案 3 :(得分:0)
是付费应用吗?如果您不为应用程序付费,则实例的生命周期非常短。
答案 4 :(得分:0)
通过使至少一个实例永久化,您在第一次使用时获得了很大的改进。大约需要15秒。在实例中加载应用程序,这就是为什么在没有人使用该应用程序一段时间时遇到长请求时间的原因