【问题标题】:Google App engine needs periodic restartingGoogle App 引擎需要定期重启
【发布时间】:2016-02-09 10:31:29
【问题描述】:

当我将它推送到应用引擎时,我有一个可以正常工作的模块。当它工作时,它可以很好地记录内容,并且可以在控制台日志查看器中访问日志。但过了一会儿它就停止工作,当我尝试访问任何 url 时,给我 500 个没有信息的服务器错误(它只是说等待 30 秒可能是个好主意)。发生这种情况时,不会记录任何请求。

如果我重新启动模块(通过将我的代码推送到应用引擎),那么它会再次运行一段时间。

模块正在运行一个 Pyramid 应用程序,配置文件看起来有点像:

application: my_app
module: my_module
version: dev
runtime: python27
api_version: 1
threadsafe: false

instance_class: B2
basic_scaling:
  max_instances: 2
  idle_timeout: 10m

handlers:
- url: /actions/.*
  script: my_module.application
  login: admin
- url: /.*
  script: my_module.application

builtins:
- appstats: off

libraries:
- name: webob
  version: latest
- name: setuptools
  version: latest

includes:
- mapreduce/include.yaml

我认为正在发生的事情是它正在达到空闲超时并关闭。我需要请求模块重新打开它。我该怎么做?

如果您需要更多信息,请告诉我,我现阶段是应用引擎新手。任何帮助将不胜感激。

【问题讨论】:

  • 您需要有一个处理程序来处理 /_ah/start 预热请求,否则实例将关闭,但系统仍应启动新实例,除非您启动时间太长。您使用基本缩放而不是自动缩放有什么特别的原因吗?我使用金字塔构建了几乎所有的 appengine 应用程序
  • 还有任何你没有线程安全的特殊原因:真的吗?
  • @TimHoffman:重新线程安全:您可以将 htat 归结为 noobery。我不确定我在应用程序本身中所做的某些事情是否是线程安全的,并认为我会安全地玩它。重新 /_ah/ 的东西,我的应用程序没有处理它。你会建议我做一个什么都不返回的视图吗?如果您可以发布一些非常有用的特定代码。并且是基本的缩放,这是因为该模块几乎只能通过 cron 访问。它所做的工作非常间歇性

标签: google-app-engine pyramid


【解决方案1】:

当一个模块启动时,App Engine 调用 url /_ah/start。你不能处理这个请求。 在您的 my_module.application 中,您需要添加与此请求匹配的处理程序:

    def get(self):
        # Let module start
        if "X-Appengine-Cron" in self.request.headers or "X-AppEngine-TaskName" in self.request.headers  or "X-Appengine-Failfast" in self.request.headers:
            return

【讨论】:

    【解决方案2】:

    即使您达到空闲超时,AppEngine 也会在新请求到来时旋转一个新实例。

    使用Cloud Debugger 检查应用程序的状态。调试器可以更轻松地查看应用程序状态并了解应用程序运行一段时间后发生的情况。

    【讨论】:

      【解决方案3】:

      查看关于启动状态的文档https://cloud.google.com/appengine/docs/python/modules/#Python_Instance_states

      如果您的处理程序可以优雅地处理 404,那么您当前的默认处理程序 /.* 应该能够处理 /_ah/start

      这就是我处理初创公司的方式。遍历主处理程序,该处理程序可以使用未找到的默认金字塔处理不存在的 url 请求。

      我注册了一个config.add_notfound_view(notfound)

      【讨论】:

        猜你喜欢
        • 2013-08-05
        • 2017-01-19
        • 2016-09-13
        • 1970-01-01
        • 2014-04-11
        • 2017-12-26
        • 2018-01-23
        • 2010-12-07
        • 1970-01-01
        相关资源
        最近更新 更多