盖去 - "This request caused a new process to be started for your application..."



我已经第二次遇到这个问题了,我想知道是否有解决方案。我正在谷歌应用引擎上运行一个应用程序,该应用程序依赖于通过HTTPJSONRPC与网站的频繁通信。GAE似乎倾向于在日志中随机显示这样的消息:

"此请求导致为您的应用程序启动一个新进程,从而导致您的应用程序代码第一次被加载。因此,该请求可能比典型的请求花费更长的时间并使用更多的CPU申请"

并在没有警告的情况下重置RAM中存储的所有变量。无论我再次设置变量或将更新的代码上传到GAE多少次,同样的过程都会反复发生,尽管增加应用程序版本号似乎可以解决问题。

我如何才能获得更多关于这种行为的信息,如何避免这种行为,并防止我在谷歌应用引擎上的Golang应用程序的数据丢失?

编辑:

存储在RAM中的变量是字符串、字节、布尔值和指针的小类。没有太复杂或太大的。

谷歌应用引擎似乎";开始一个新的过程";在大量使用的几秒钟内,这段时间应该不足以让应用程序因未使用而关闭。从应用程序上传到GAE、设置变量到创建新进程之间的时间间隔不到一分钟。

您知道GAE是一个基于负载自动管理实例的云托管解决方案吗?这是它的主要功能,也是人们使用它的原因

当负载增加时,GAE会创建一个新实例,当然,该实例的所有RAM变量都为空。

解决方案是不要期望变量可用,也不要在请求结束时将它们存储到永久存储中(会话、内存缓存、数据存储),如果在请求开始时不存在,则加载它们。

您可以在这里的文档中阅读有关GAE实例的信息,查看性能部分:

http://code.google.com/appengine/kb/java.html

在有小数据可用的情况下,如果它是静态的,那么您可以在启动新实例时将其加载到内存中。如果是动态数据,则应该使用它们的api将其保存到数据库中。

我建议保持GAE实例的有效性,要么为Always-On服务付费,要么按照我的建议在这里使用cron:

http://rwyland.blogspot.com/2012/02/keeping-google-app-engine-gae-instances.html

我使用我所说的3、7、11分钟的cron工作的"黄金时间表"。

如果想要具有常驻内存的长时间运行实例,则应该考虑使用Backends。

相关内容

最新更新