使用免费的谷歌应用程序引擎java非常慢的性能

时间:2014-12-17 14:53:39

标签: java google-app-engine

我在前端启动了一个带有angularJs的应用程序,在后端启动了谷歌应用程序引擎java用于休息服务。 一切正常,但我的应用只有我的流量。因此,每次我都不发送请求一段时间,我的应用程序可能需要超过30秒来回答我...

我不是唯一一个在gae上使用java app遇到此问题的人。 我在互联网上找到了两个解决方案:

  • 创建新的实例,但它不会自由......
  • 配置预热请求。

所以我用这个定制web.xml:

  <servlet-mapping>
    <url-pattern>/_ah/start</url-pattern>
    <servlet-name>startup</servlet-name>
  </servlet-mapping>

  <servlet>
    <servlet-name>startup</servlet-name>
    <servlet-class>fr.gae.todo.api.servlet.StartupServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
  </servlet>

和appengine-web.xml与此:

<warmup-requests-enabled>true</warmup-requests-enabled>

但我的StartupServlet从未记录任何内容......有人知道为什么吗?

或带有加载请求的解决方案?因为我可以在日志中看到它们

2 个答案:

答案 0 :(得分:0)

是的,我能理解这种困惑......

在App Engine中,预热请求不是您认为的直观。如果没有可用的实例,它不会对实例进行warm_up,然后发送请求。它实际上做的是在所有实例被占用时预测峰值流量;然后,如果有更多请求进入,它会预热一些实例。

请记住,实例加载时间不能神奇地缩短,因此当您没有活动实例时,第一个请求将花费X时间来提供服务,不管是否正在预热。

如果您需要30秒加载,您可以告诉实例“预热”30秒然后发送立即处理的请求(总共30秒)或者您只需发送请求并加载实例( loading_request)并需要30秒来处理您的请求(总共30秒)。你明白我的意思吗?这就是为什么当你的实例都没有启动时没有实现预热请求的原因,这是毫无意义的。

有关详细信息,请阅读本文 - https://cloud.google.com/appengine/docs/adminconsole/instances#Warmup_Requests

=== --- ===

解决方案正如您所提到的那样......始终将实例保持活动并保持空闲状态,这将起作用。

答案 1 :(得分:0)

谢谢你,谢谢! 我最终选择了另一种似乎运作良好的解决方案。 我在uptimerobot.com上创建了一个免费帐户,其作业每隔25分钟就会请求一次我的REST服务。通过这种方式,我的实例仍然具有良好的响应时间。