4

最近、正常に実行されていてエラーがないApp Engineサイトにアクセスし、大きな醜いエラーページを取得しました。管理ツールで、AppEngineはこのエラーをログに記録していました:

2012-09-06 10:53:43.938
Traceback (most recent call last):
  File "/base/python27_runtime/python27_lib/versions/1/google/appengine/runtime/wsgi.py", line 189, in Handle
    handler = _config_handle.add_wsgi_middleware(self._LoadHandler())
  File "/base/python27_runtime/python27_lib/versions/1/google/appengine/runtime/wsgi.py", line 227, in _LoadHandler
    handler = __import__(path[0])
  File "/base/data/home/apps/s~myapp/1.361555922666090832/main.py", line 3, in <module>
    from controllers.routes import api_routes, web_routes, admin_routes
  File "/base/data/home/apps/s~myapp/1.361555922666090832/controllers/routes/api_routes.py", line 3, in <module>
    from ..api import api_obj_controller, api_app_controller, api_path_controller, api_user_controller
  File "/base/data/home/apps/s~myapp/1.361555922666090832/controllers/api/api_obj_controller.py", line 2, in <module>
    from ..handlers.api_handler import ApiRequestHandler
  File "/base/data/home/apps/s~myapp/1.361555922666090832/controllers/handlers/api_handler.py", line 2, in <module>
    from ..handlers.content_handler import BaseRequestHandler
  File "/base/data/home/apps/s~myapp/1.361555922666090832/controllers/handlers/content_handler.py", line 3, in <module>
    from webapp2_extras import jinja2
  File "/base/data/home/apps/s~myapp/1.361555922666090832/webapp2_extras/jinja2.py", line 15, in <module>
    import jinja2
  File "/base/python27_runtime/python27_lib/versions/third_party/jinja2-2.6/jinja2/__init__.py", line 33, in <module>
    from jinja2.environment import Environment, Template
  File "/base/python27_runtime/python27_lib/versions/third_party/jinja2-2.6/jinja2/environment.py", line 13, in <module>
    from jinja2 import nodes
ImportError: cannot import name nodes
W 2012-09-06 10:53:43.967
After handling this request, the process that handled this request was found to have handled too many sequential errors, and was terminated. This is likely to cause a new process to be used for the next request to your application. If you see this message frequently, you are likely returning errors continously from your application.

そのため、多くのエラーが発生し続けましたが、新しいコードを公開せずに再び動作を開始しました。私の懸念は明らかに、将来これをどのように防ぐことができるかということです。なぜこれが起こったのですか?そして、コード修正をデプロイせずにそれ自体を修正することはどのように可能ですか?このエラーは、顧客にランダムに発生することを心配しています。

編集:

また、最初に受け取ったエラーはDeadlineExceededErrorエラーで、「このリクエストにより、アプリケーションの新しいプロセスが開始されたため、アプリケーションコードが初めて読み込まれました。このリクエストには時間がかかる場合があります。アプリケーションの通常のリクエストよりも長く、より多くのCPUを使用します。」

したがって、このメッセージとティムがコメントしたことは完全に理にかなっていますが、それが二度と起こらないように修正するにはどうすればよいですか?新しいインスタンスがスピンアップされるまで、DeadlineExceededErrorが基本的にサイト全体でエラーにならないようにするにはどうすればよいですか?(つまり、私がそれを正しく理解している場合)

4

1 に答える 1

2

私が正しく理解していれば、一部の読み込みリクエストでDeadlineExceededErrorsが表示されましたが、そのリクエストを処理したインスタンスは強制終了されませんでした。

それはおそらくあなたが次のようなブロックを除いていくつかの裸を持っているためです:

try:
    do something
except:
    do other things

インスタンスに何が起こったのかというと、そのような例外句の1つがDeadlineExceededErrorsをキャッチし、DeadlineExceededErrorをスローする代わりにコードが実行され続けたということです。jinja2のインポート中にそのDeadlineExceededErrorがスローされた場合、jinja2モジュールはハーフロード状態のままになる可能性があります。したがって、インスタンスは破損した状態で存続します。

DeadlineExceededErrorが正しくスローされた場合、インスタンスを強制終了して、現在のように破損したインスタンスが発生しないようにする必要があります。

それは私の仮定です、それが事実である可能性が高いかどうか私に知らせてください。

于 2012-09-24T11:23:01.997 に答える