【问题标题】:Very slow performance with a free google app engine java使用免费的谷歌应用引擎 java 性能非常慢
【发布时间】:2014-12-19 23:58:52
【问题描述】:

我在前端启动了一个带有 angularJs 的应用程序,并在后端启动了 google app engine java 用于休息服务。 一切正常,但我的应用程序只有我的流量。所以每次我一段时间不发送请求时,我的应用程序可能需要超过 30 秒才能回复我...

我不是唯一一个在 gae 上遇到 java 应用程序这个问题的人。 我在网上找到了两个解决方案:

  • 在 gae 上创建新实例,但它不是免费的...
  • 配置预热请求。

所以我用这个自定义 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 从来没有记录任何东西...有人知道为什么吗?

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

【问题讨论】:

  • 我的应用有 20 多个模块,100 多种数据类型和数百个 RPC 方法——实例启动时间在 6 到 8 秒之间。您应该考虑减少启动时间。

标签: java google-app-engine


【解决方案1】:

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

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

请记住,实例加载时间不能神奇地缩短,因此当您没有活动实例时,第一个请求将花费 X 时间来处理,无论是否预热。

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

详情请阅读这篇文章-https://cloud.google.com/appengine/docs/adminconsole/instances#Warmup_Requests

===---===

解决方案如您所述...始终保持实例处于活动状态和空闲状态,这将起作用。

【讨论】:

    【解决方案2】:

    谢谢你! 我最终选择了另一种似乎效果很好的解决方案。 我在 uptimerobot.com 上创建了一个免费帐户,该帐户每 25 分钟请求一次我的 REST 服务。这样,我的实例仍然有很好的响应时间。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-10-10
      • 1970-01-01
      • 1970-01-01
      • 2012-09-06
      • 2014-04-18
      • 2014-09-03
      • 2012-04-11
      • 1970-01-01
      相关资源
      最近更新 更多