2012-03-06 115 views
1

此線程似乎死了:http://groups.google.com/group/google-appengine-java/browse_thread/thread/80d014fd5abd526fAppEngine上的Spring:應用程序啓動緩慢並且.....死亡?

這裏發生了什麼:

  • 局域,通過MVN GAE:運行,應用程序完美的作品;
  • 我將應用程序部署到GAE;
  • 我第一次叫「/」網址我等了很多時間,但沒有什麼奇怪的:應用程序正在初始化,除非它以500錯誤結束;
  • 我繼續使用我的應用程序....所有是正確的;
  • 我停止使用應用3小時(例如);
  • 我回來使用它,它已死了!它需要很多時間來初始化!這太可怕了! 500錯誤再次

異常堆棧跟蹤是:

Uncaught exception from servlet 
javax.servlet.UnavailableException: com.google.apphosting.api.DeadlineExceededException: This request (fc36c7e0f23da9e6) started at 2012/03/06 21:26:41.562 UTC and was still executing at 2012/03/06 21:27:42.117 UTC. 
    at org.mortbay.jetty.servlet.ServletHolder.makeUnavailable(ServletHolder.java:415) 
    at org.mortbay.jetty.servlet.ServletHolder.initServlet(ServletHolder.java:458) 
    at org.mortbay.jetty.servlet.ServletHolder.doStart(ServletHolder.java:263) 
    at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50) 
    at org.mortbay.jetty.servlet.ServletHandler.initialize(ServletHandler.java:685) 
    at org.mortbay.jetty.servlet.Context.startContext(Context.java:140) 
    at org.mortbay.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1250) 
    at org.mortbay.jetty.handler.ContextHandler.doStart(ContextHandler.java:517) 
    at org.mortbay.jetty.webapp.WebAppContext.doStart(WebAppContext.java:467) 
    at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50) 
    at com.google.apphosting.runtime.jetty.AppVersionHandlerMap.createHandler(AppVersionHandlerMap.java:202) 
    at com.google.apphosting.runtime.jetty.AppVersionHandlerMap.getHandler(AppVersionHandlerMap.java:171) 
    at com.google.apphosting.runtime.jetty.JettyServletEngineAdapter.serviceRequest(JettyServletEngineAdapter.java:123) 
    at com.google.apphosting.runtime.JavaRuntime$RequestRunnable.run(JavaRuntime.java:422) 
    at com.google.tracing.TraceContext$TraceContextRunnable.runInContext(TraceContext.java:449) 
    at com.google.tracing.TraceContext$TraceContextRunnable$1.run(TraceContext.java:455) 
    at com.google.tracing.TraceContext.runInContext(TraceContext.java:695) 
    at com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContextNoUnref(TraceContext.java:333) 
    at com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContext(TraceContext.java:325) 
    at com.google.tracing.TraceContext$TraceContextRunnable.run(TraceContext.java:453) 
    at com.google.apphosting.runtime.ThreadGroupPool$PoolEntry.run(ThreadGroupPool.java:251) 
    at java.lang.Thread.run(Thread.java:679) 

不GAE Java團隊解決了這個錯誤了嗎?

我該怎麼辦?我想避免設置每5分鐘輪詢我的網址cron工作:-(

回答

3

我相信簡單的答案是支付服務和創建一個resident instance,那麼你將不會受到旋轉-up /拆除它可以是彈簧尤其是昂貴的。

另一種選擇是修剪你的應用程序,所以它並不需要這麼長時間來啓動。

+0

它看起來像一個很好的解決方案,但在這個「測試」階段,我不會支付任何費用。謝謝! :)現在,我創建了一個cron作業,它可以讓我的應用程序保持活躍....看起來也不錯。 – 2012-03-07 08:08:38

+0

在我昨天看到的一些谷歌文檔中(失去了鏈接),他們說他們可以識別用於保持應用程序溫暖的cron作業。不知道他們會怎麼做,但只是想我會提出來。 – digitaljoel 2012-03-07 15:26:13

+0

保持我的應用程序溫暖會怎麼樣?!? – 2012-03-07 15:32:12

2

您可以使用warmup requests,使您的實例最多速度在發送第一個用戶請求之前

注意:這並不影響第一次請求的延遲時間當你沒有實例運行時,它只有在新實例(超出現有實例)被啓動時纔會有幫助。但是,它應該有助於解決第一個請求中的500錯誤。

+0

謝謝,雖然這是一個很好的建議,但這不是答案 – 2012-03-07 08:07:32

3

讓我們明白一點,熱身請求並不能解決DeadlineExceededException錯誤。

您看到的DeadlineExceededException是由於啓動時間超過了60秒。

熱身請求不會使啓動更快。

付費實例不會使啓動更快。

啓動成本主要是由於classpath上的類加載和資源加載造成的。 任何掃描類/資源的類路徑加載緩慢。

減少掃描時間取決於您的應用在啓動時加載的框架。通常的嫌疑人是Spring和JSF。

-lp

+0

我同意熱身請求不會使啓動更快。但是從我的實驗來看,jar掃描只需要3秒鐘(在F1上),jar的加載實際上大約是7 – ZiglioUK 2014-02-17 23:20:40

相關問題