2013-09-29 2 views
1

응용 프로그램이 처음으로 새 인스턴스를 시작할 때 DeadlineExceededError가 발생합니다. 브라우저에서 새로 고침을하면 잘 작동하며 시도한 페이지는 중요하지 않습니다. 이상한 것은 모든 디버깅 코드를 잘 볼 수 있다는 것입니다. 실제로 self.response를 호출하기 직전에 로그에 기록하고 콘솔의 로그에 표시합니다. 내가 개발 환경의 모든 페이지로드 문제가 아니에요 때문에 이것은, 문제를 해결하는 데 매우 단단하고, 역 추적은 나에게 약간 불투명 :DeadlineExceededError (webapp2 사용)

E 2013-09-29 00:10:03.975 
Traceback (most recent call last): 
    File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/runtime/wsgi.py", line 267, in Handle 
    for chunk in result: 
    File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/ext/appstats/recording.py", line 1286, in appstats_wsgi_wrapper 
    end_recording(status) 
    File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/ext/appstats/recording.py", line 1410, in end_recording 
    rec.save() 
    File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/ext/appstats/recording.py", line 654, in save 
    key, len_part, len_full = self._save() 
    File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/ext/appstats/recording.py", line 678, in _save 
    namespace=config.KEY_NAMESPACE) 
    File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/api/memcache/__init__.py", line 1008, in set_multi 
    namespace=namespace) 
    File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/api/memcache/__init__.py", line 907, in _set_multi_with_policy 
    status_dict = rpc.get_result() 
    File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/api/apiproxy_stub_map.py", line 612, in get_result 
    return self.__get_result_hook(self) 
    File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/api/memcache/__init__.py", line 974, in __set_with_policy_hook 
    rpc.check_success() 
    File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/api/apiproxy_stub_map.py", line 578, in check_success 
    self.__rpc.CheckSuccess() 
    File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/api/apiproxy_rpc.py", line 133, in CheckSuccess 
    raise self.exception 
DeadlineExceededError 

I 2013-09-29 00:10:03.988 
This request caused a new process to be started for your application, and thus caused your application code to be loaded for the first time. This request may thus take longer and use more CPU than a typical request for your application. 

난 디버깅에 대한 갈 방법을 잘 모르겠어요 이 오류는 모든 코드가 이미 실행 된 이후 인 것 같습니다.

편집 : 나는이를 추가해야합니다 :

I 2013-09-29 00:09:06.919 
    DEBUG: Writing output! 
E 2013-09-29 00:10:03.975 
로깅 사이의 거의 전체 분있다 볼 수 있습니다

"출력을 쓰기가!" self.response가 호출되기 직전과 오류가 발생할 때.

답변

0

프런트 엔드 인스턴스에 대한 요청이 60 초 이내에 응답을받지 못하면 deadlineexceedederror이 응용 프로그램 엔진에서 발생합니다. 따라서 실행중인 인스턴스가없고 앱에서 새 사용자 요청을 받으면 처리를 위해 새 인스턴스가 시작되어야합니다. 그러면 전체적으로 response time = instance startup time like library loading and initial data access + the time for processing the user request이되며 이로 인해 최종 기한 초과 오류가 발생합니다. 그런 다음 즉시 앱에 액세스 할 때 이미 실행중인 인스턴스가 있으므로 response time = the time for processing the user request이며 오류가 발생하지 않습니다.

라이브 요청이 도착하기 전에 인스턴스를 준비하는 것과 같은 warmup 요청을 포함하여 handling deadlineexceedederror의 제안 된 접근 방식을 확인하십시오.

+0

나는이 내용을 읽었지만 적용할만한 것은 확실하지 않습니다. 나는 많은 모듈을 가져 오지 않을 것이고, 예열 요청이 여기에서 도움이 될지 확신하지 못한다. 살아있는 인스턴스가 없을 때 일어나는 일이기 때문이다. (현재 사용자와 테스트 중이며 아직 트래픽이 많지 않습니다.) 로그에 모든 라이브러리를로드 한 시점까지 기록 할 수 있다는 사실도 있습니다. 최대 시간이 60 초라면 내 코드가 실행되는 데 3 초 밖에 걸리지 않으며 self.response가 호출 된 후 시간이 초과되었음을 추론 할 수 있습니다. –

+0

좋아, 알았어. 예열 요청을 켜기 때문에 최소한의 유휴 인스턴스를 설정할 수있었습니다. 1로 설정 했으므로 이제는 페이지를 잘로드 할 수 있습니다. 나는 아직도 내가 말할 수있는 것부터 내 코드가 처음으로 회전 할 때 3 초 정도만 걸린다는 점에서이 작업을 수행하는 것이 약간 이상하다고 생각한다. –

+0

인스턴스를 시작하지 않으므로 분 유휴 인스턴스를 켜면 문제가 숨겨집니다. 로드가 올라가고 새로운 무언가를 시작해야 할 때까지도이 문제가 계속 발생합니다. 적어도, 당신은 appstats 모듈을로드하고있다. 시작하도록 설정을 해제하십시오. 간접적으로 가져 오는 몇몇 모듈은 다른 많은 모듈을 가져올 수도 있습니다. – dragonx