cron作业到另一台服务器正在服务的间歇超时?

问题描述:

我有一个应用程序引擎项目。我有一个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

您的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