2012-01-21 78 views
0

我們正在使用後端爲我們的 用戶並行化大批量的工作。這涉及將100個任務添加到專用隊列,其中 將任務分佈在5個動態後端上。這些任務中的很多都會對外部網絡服務執行 網址抓取。診斷appengine java後端在已部署的應用程序中掛起

當我們運行這對於一個用戶它似乎很好地工作,但只要我們 (在夜間批處理運行例如)對於許多用戶運行它,我們看到大部分的 後端最終停止處理新的任務。

我們嘗試限制它的速率,但這也沒有幫助。我可以手動停止被凍結的 後端,並且新的後端會啓動並開始 處理,直到它們凍結。最終,在停止凍結服務器的幾次重複之後,所有這些都完成了。

顯然這嚴重限制了我們的擴展能力,所以我想知道如何診斷這個問題。我們不能在 本地主機上重現此操作,因爲它不是真正的多線程,並且不真正 複製部署的數據模式。

我們可能會因使用拉入隊列處理這個問題,但是這更多 代碼來寫,我寧願讓隊列/後端調度做到這一點對我們來說 工作。

我想要做的是將一個探查器或jconsole附加到後端 - 那就是 立即告訴我凍結來自哪裏。那是甚至 可能嗎?如果沒有,有沒有人有其他的技巧,我們可以使用 來診斷凍結的後端? 「凍結」的實例有不同的內存空間,從150MB到250MB不等,也就是說它可能是內存泄漏,但內存數量並不真正支持它,它們在被凍結時不消耗任何cpu,也不處理新的任務。

感謝您的關注和幫助,史蒂夫

回答

2

在我使用的Java VisualVM過去。您可以將它附加到遠程運行的JVM上,並使用它來進行內存轉儲,並檢查CPU /線程的使用情況等。對於找出這樣的東西非常方便。

+0

感謝您的支持,但我不認爲這可以附加到GAE後端正確? –

+0

我從來沒有使用GAE,但我會假設他們允許訪問服務器實例或具有一些遠程調試功能。 –

相關問題