2015-02-06 81 views
0

我已經從Eclipse項目導出代碼到jar文件。當我在另一個標準的java項目中訪問這個jar文件時,需要5分鐘才能完成。在Google App Engine上的一個servlet上,完成需要將近一個小時。這只是使用Google App Engine的一項功能,還是可能存在其他問題?我正在使用帶有cron作業的servlet來更新數據存儲,但寫入數據存儲所用的時間只是總運行時間的一小部分。谷歌應用程序引擎,導入的jar運行速度非常慢

更新

的代碼關聯標註了大量新聞稿件的公司名稱和那裏文章,用樸素貝葉斯分類器。這就是計劃需要的時間長度,但不是爲什麼它需要更多的App Engine。

+0

你需要來分析它,看看發生了什麼。即使是5分鐘也是Java代碼執行的很長時間 - 它必須等待某個東西或運行很多循環。 – 2015-02-06 15:54:44

+0

@AndreiVolgin更新了問題 – user2644013 2015-02-06 15:59:46

回答

1

沒有看到它就很難優化程序,但這裏有幾點提示。

如果不受限制,App Engine上的代碼可以像任何地方一樣快速地執行。您應該查看數據訪問時間(讀取文章的速度),數據寫入時間和/或內存限制。像你描述的應用程序往往需要大量的內存。

  1. 您可以檢查App Engine控制檯上的內存統計信息。如果碰到限制,可以使用更大的實例,或將處理負載分成更小的塊。

  2. 如果將負載分解爲單個任務並使用任務隊列,則可以利用單個實例上運行的多個線程。涉及讀/寫數據時,這通常會提高性能。

  3. 確保在讀取/寫入數據時使用正確的塊大小。例如,數據存儲區中的查詢默認塊大小爲10,而您可以將其增加到1,000。同樣的邏輯適用於數據存儲。當您讀/寫數千個實體時,它會使性能發生巨大差異。這也適用於其他存儲選項。

作爲用於比較數據點,我能夠從因特網上的抓取(這是比從存儲慢得多)和每小時處理數百萬個文檔(提取物,清潔,索引等)一個常規的App Engine實例。