2011-12-22 18 views
6

我一直在戰鬥用TransferManager問題的幾個星期,我希望能得到一些反饋,AWS的Java TransferManager問題,JVM無法獲得更多本地線程

我有等待服務器應用程序爲任務發送給它。其中一些任務需要上傳到S3。該任務包含我需要的所有上載信息,包括訪問密鑰。

在我的實際上傳代碼中,每次需要上傳時我都需要創建一個新的S3ClientTransferManager對象,因爲我不知道提前訪問密鑰。

系統處理大約1200次上傳後,我收到一個錯誤,指示JVM無法獲得更多本機線程。我在應用程序中附加了一個分析器,並注意到TransferManager對象沒有正確清理,有數千個「s3-transfer-manager-worker-1」線程閒置。

上傳完成後,我試圖添加對TransferManager.shutdownNow()的調用。這確實清理了線程。但是,無論何時創建新的TransferManager並嘗試上傳,我都開始收到RejectedExecutionException

TransferManager包含UploadMonitorUploadMonitor具有靜態ScheduledExecutorServiceTransferManager.shutdownNow()調用在執行程序服務上調用shutdownNow()的靜態方法UploadMonitor.shutdownNow()。這使得我不能再使用任何TransferManager對象,即使我嘗試創建一個新對象。

如何使用多個傳輸對象而不會耗盡線程?這似乎是一個錯誤。

回答