2013-04-29 93 views
0

我有一個應用程序引擎項目。我有一個cron任務,將嘗試打開一個網址(我自己的另一臺服務器上,運行碼頭),每15分鐘:cron作業到另一臺服務器正在服務的間歇超時?

<cron> 
    <url>/pingjetty</url> 
    <description>Jetty up check.</description> 
    <schedule>every 15 minutes</schedule> 
</cron> 

我去拿的時候SocketTimeoutException 25%。我知道,當應用引擎報告超時時,碼頭實例已啓動並正在運行。縱觀碼頭日誌,它看起來像這些請求永遠也做不到:

[28/Apr/2013:12:24:59 +0000] "GET /jettyapi/echo HTTP/1.1" 200 31 
[28/Apr/2013:12:40:03 +0000] "GET /jettyapi/echo HTTP/1.1" 200 31 
[28/Apr/2013:12:55:04 +0000] "GET /jettyapi/echo HTTP/1.1" 200 31 
---- missing entry, should be a connection attempt here around 13:10 ----- 
[28/Apr/2013:13:27:08 +0000] "GET /jettyapi/echo HTTP/1.1" 200 31 
[28/Apr/2013:13:42:09 +0000] "GET /jettyapi/echo HTTP/1.1" 200 31 
[28/Apr/2013:13:57:09 +0000] "GET /jettyapi/echo HTTP/1.1" 200 31 

而僅僅是明確的,這裏的東西流:

    我的應用程序引擎實例
  1. cron作業火災,呼叫本地servlet/pingjetty。
  2. 此servlet試圖打開url:「www.example.com/jettyapi/echo」,它位於我的碼頭實例上。
  3. 連接很好75%的時間 - 但25%的時間我會得到SocketTimeoutException。從應用程序引擎servlet中拋出異常,試圖與我的碼頭實例進行通信。

是否有可能從應用引擎的一方發生了什麼?過去兩年我一直在做這個cron工作,從來沒有見過這個。我將連接和讀超時增加到每個60秒。當超時發生時(其他用戶在發生超時時通過瀏覽器連接到碼頭實例),我還確保碼頭實例已啓動並提供服務。

任何想法將是巨大的,不知道在哪裏繼續調查,

感謝

-------更新---------------

我無法弄清楚發生了什麼事。我只是增加了一個重試循環到我的cron作業如下:

int tries = 3; 
for (int i = 0; i < tries; i++) { 
    try { 
     openUrl("www.example.com/jettyapi/echo"); 
    } catch (SocketTimeoutException) { 
     continue; // try again 
    } 
} 

所以第一次嘗試失敗25%像以前一樣,但後續重試做工精細。自從添加這個以來我沒有完全失敗。但它仍然令人困惑。

+0

看起來一切正常:https://code.google.com/status/appengine – 2013-04-29 17:37:55

+0

不知道什麼是錯的,但是您可能會更好,因爲cron作業每15分鐘排入一個任務並讓處理器完成該任務對服務器執行實際的HTTP請求 - 如果請求失敗,讓任務處理器返回5xx錯誤代碼,AppEngine將重試該請求。 – 2013-04-29 18:12:51

+0

我添加了一個重試循環,它現在屏蔽了超時。所以第一個會在循環中失敗,但後續的將會通過。仍然不確定發生了什麼,但是這爲我的目的「修復」了它。 – user291701 2013-05-01 16:36:41

回答

0

您的Cron作業首先向App Engine應用程序中的路徑/ pingjetty發出請求,然後App Engine應用程序中的Servlet向您的Jetty實例發出請求。你在哪裏看到錯誤信息?您是否在App Engine應用程序日誌中看到堆棧跟蹤?這意味着Cron作業正在成功解鎖並向您的App Engine應用發送請求。

+0

啊,是的,我沒有說清楚 - cron的工作肯定是解僱,並且執行了本地servlet(ping了碼頭實例)。這是報告SocketTimeoutException的本地servlet。 – user291701 2013-04-29 19:53:05