Google App Engine超时?

时间:2011-09-07 03:29:53

标签: google-app-engine timeout

在Google App Engine应用中,我使用以下行从网站上读取页面:

  String Url="http://...",line,Result="";

  URL url=new URL(Url+"?r="+System.currentTimeMillis());
  BufferedReader reader=new BufferedReader(new InputStreamReader(url.openStream()));

  while ((line=reader.readLine())!=null) { Result+=line+"\n"; }
  reader.close();

但是我收到了以下错误:

Uncaught exception from servlet
com.google.apphosting.api.DeadlineExceededException: This request (f5e2889605d27d42) started at 2011/09/07 03:20:41.458 UTC and was still executing at 2011/09/07 03:21:30.888 UTC.
    at sun.misc.Unsafe.park(Native Method)
    at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:226)
    at java.util.concurrent.locks.AbstractQueuedSynchronizer.doAcquireSharedNanos(AbstractQueuedSynchronizer.java:1037)
    at java.util.concurrent.locks.AbstractQueuedSynchronizer.tryAcquireSharedNanos(AbstractQueuedSynchronizer.java:1326)
    at com.google.common.util.concurrent.AbstractFuture$Sync.get(AbstractFuture.java:276)
    at com.google.common.util.concurrent.AbstractFuture.get(AbstractFuture.java:82)
    at com.google.appengine.tools.development.TimedFuture.get(TimedFuture.java:55)
    at com.google.common.util.concurrent.ForwardingFuture.get(ForwardingFuture.java:69)
    at com.google.apphosting.runtime.ApiProxyImpl.doSyncCall(ApiProxyImpl.java:177)
    at com.google.apphosting.runtime.ApiProxyImpl.access$000(ApiProxyImpl.java:56)
    at com.google.apphosting.runtime.ApiProxyImpl$1.run(ApiProxyImpl.java:150)
    at com.google.apphosting.runtime.ApiProxyImpl$1.run(ApiProxyImpl.java:148)
    at java.security.AccessController.doPrivileged(Native Method)

似乎花了比想要等待的时间更长的时间,如果该网站运行缓慢,该怎么办?

2 个答案:

答案 0 :(得分:4)

当处理对Web应用程序的请求的代码需要30秒以上的处理时,会抛出DeadlineExceededException。据推测,您的代码需要一段时间才能处理,因为它必须等待从其他站点接收数据的时间长度。

您可以在task queue上创建任务以获取和处理该数据,并更改您的网络请求/响应流程以回复您的任务进度。

答案 1 :(得分:4)

如果您的代码在请求处理程序中运行,则默认情况下会有一个App-Engine强制执行的60秒截止日期。你无法改变它。请参阅"截止日期" row /"自动缩放"此页面下的图表列"缩放类型":

https://developers.google.com/appengine/docs/java/modules/

但是,如果您将模块更改为使用"手动缩放"此代码将能够运行几个小时。和" B1" - " B4"实例。例如:

默认/ SRC /主/ web应用/ WEB-INF /应用服务引擎-web.xml中:

<?xml version="1.0" encoding="utf-8"?>
<appengine-web-app xmlns="http://appengine.google.com/ns/1.0">
  <application>myapp</application>
  <module>default</module>
  <version>1</version>
  <threadsafe>true</threadsafe>

  <instance-class>B1</instance-class>
  <manual-scaling>
    <instances>1</instances>
  </manual-scaling>
</appengine-web-app>

在这种类型的实例上,您的请求通常不会超时数小时。 (该文件声称截止日期是&#34;无限期&#34;。)