2016-02-09 29 views
1

我有一個模塊,當我把它推送到應用引擎時工作正常。當它工作時,它會很好地記錄日誌,日誌可以在控制檯日誌查看器中訪問。但過了一段時間它就停止工作,當我嘗試訪問任何網址時,給我500個服務器錯誤,沒有任何信息(它只是說等待30秒可能是個好主意)。當發生這種情況時,沒有任何記錄請求。谷歌應用引擎需要定期重啓

如果我重新啓動模塊(通過將我的代碼推送到應用程序引擎),然後再運行一段時間。

模塊運行的是金字塔的應用程序和配置文件看起來有點像:

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 

我認爲正在發生的事情是,它擊中空閒超時和關閉。我需要模塊將其重新打開。我怎麼做?

讓我知道如果你需要更多的信息,我是在這個階段的應用引擎noob。任何幫助將不勝感激。

+0

你需要一個處理程序處理/ _ah/start熱身請求,否則一個實例會關閉,但系統應該仍然啓動新的實例,除非啓動時間過長。是否有任何特定的原因使用基本縮放而不是自動縮放?我使用金字塔幾乎構建了所有我的appengine應用程序 –

+0

也有任何特殊原因,您沒有線程安全:true? –

+0

@TimHoffman:re threadsafe:你可以把htat放到noobery。我不確定我在應用程序中執行的某些操作是否是線程安全的,並且認爲我會安全地使用它。 Re/_ah/stuff,我的應用程序沒有處理它。你會建議我做一個觀點,只是沒有返回?如果你可以發佈一些非常有用的特定代碼。而基本的縮放,這是因爲模塊幾乎只能通過cron訪問。它所做的工作非常間歇 – Sheena

回答

2

當模塊啓動時,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檢查你的應用程序的狀態。調試器可以更輕鬆地查看應用程序狀態並瞭解應用程序運行後發生的情況。

2

檢查啓動狀態的文檔https://cloud.google.com/appengine/docs/python/modules/#Python_Instance_states

你當前默認的處理器/.*應該能夠應對/_ah/start如果YOUE處理程序可以優雅地處理一個404.

這就是我如何處理初創公司。使用未找到的默認金字塔處理可以處理不存在的url請求的主處理程序。

我有一個config.add_notfound_view(notfound)註冊。

相關問題