Проблема с AWS Java TransferManager, JVM не может получить больше собственных потоков - PullRequest
6 голосов
/ 23 декабря 2011

Я боролся с проблемой TransferManager уже несколько недель, и я надеюсь получить некоторую обратную связь,

У меня есть серверное приложение, которое ожидает отправки задач на него.Некоторые из этих задач требуют загрузки на S3.Задача содержит всю необходимую для загрузки информацию, включая ключи доступа.

В моем фактическом коде загрузки мне нужно создавать новый объект S3Client и TransferManager каждый раз, когда мне нужно выполнить загрузку, потому чтоЯ не знаю своих ключей доступа заранее.

После того, как система обработала приблизительно 1200 загрузок, я получил ошибку, указывающую, что JVM не может получить больше собственных потоков.Я подключил к приложению профилировщик и заметил, что объект TransferManager не очищается должным образом, тысячи потоков s3-Transfer-Manager-worker-1 бездействуют.

Я попыталсядобавьте вызов к TransferManager.shutdownNow() после завершения загрузки.Это действительно очистило темы.Однако я начал получать RejectedExecutionException всякий раз, когда создавался новый TransferManager и была предпринята попытка загрузки.

TransferManager содержит UploadMonitor, а UploadMonitor имеет статический ScheduledExecutorService.TransferManager.shutdownNow() вызывает статический метод UploadMonitor.shutdownNow(), который вызывает shutdownNow() в службе исполнителя.Это позволяет мне больше не использовать TransferManager объекты, даже если я пытаюсь создать новый.

Как мне использовать несколько объектов переноса без исчерпания потоков?Кажется, это ошибка.

1 Ответ

5 голосов
/ 20 января 2012

Это было подтверждено Amazon как ошибка.Подробности здесь https://forums.aws.amazon.com/thread.jspa?threadID=83520&tstart=0

...