我一直在与TransferManager问题作斗争几周了,希望能得到一些反馈,

我有一个服务器应用程序,等待任务发送给它。其中一些任务需要上载到S3。该任务包含我需要的所有上传信息,包括访问 key 。

在我实际的上传代码中,每次我需要上传时,我都需要创建一个新的S3ClientTransferManager对象,因为我不提前知道自己的访问 key 。

系统处理大约1200次上载后,我收到一条错误消息,指示JVM无法再获取任何 native 线程。我在应用程序上附加了一个探查器,并注意到TransferManager对象没有得到正确的清理,有成千上万的“s3-transfer-manager-worker-1”线程处于空闲状态。

上传完成后,我尝试添加对TransferManager.shutdownNow()的调用。那确实清理了线程。但是,无论何时创建新的RejectedExecutionException并尝试上传,我都开始接收TransferManager
TransferManager包含UploadMonitor,而UploadMonitor具有静态ScheduledExecutorServiceTransferManager.shutdownNow()调用静态方法UploadMonitor.shutdownNow(),该方法在执行程序服务上调用shutdownNow()。这样一来,即使我尝试创建一个新的TransferManager对象,也无法使用它。

如何在不耗尽线程的情况下使用多个传输对象?这似乎是一个错误。

最佳答案

亚马逊已将其确认为错误。在此处查看详细信息https://forums.aws.amazon.com/thread.jspa?threadID=83520&tstart=0

关于java - AWS Java TransferManager问题,JVM无法再获取任何 native 线程,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8609872/

10-09 03:49