Тайм-аут ожидания подключения из пула для загрузки S3 - PullRequest
0 голосов
/ 29 ноября 2018

Я пытаюсь загрузить огромное количество файлов с 7 машин.На каждой машине я запускаю 6 потоков для загрузки в S3.Когда я запустил загрузку с одной машины, она работала нормально, но когда я запустил на 7 машинах, она стала давать сбой.

Я получаю ошибку ниже в остальных машинах.

ОШИБКА - AmazonClientExceptioncom.amazonaws.SdkClientException: Невозможно выполнить HTTP-запрос: время ожидания ожидания соединения из пула

Общее количество маленьких файлов, которые я загружаю в S3 = 1659328

Количество записей в каждомthread = 276554

Так я должен закрыть TransferManager?Если да, то как мне его закрыть?Мое приложение многопоточное.Когда я вызываю tm.shutdownNow();, другие потоки не смогут его использовать.

Вот мой код для загрузки в S3.

AWSCredentials credential = new ProfileCredentialsProvider("skjfffkjg-Prod-ServiceUser").getCredentials();
        AmazonS3Client s3Client = (AmazonS3Client) AmazonS3ClientBuilder.standard().withRegion("us-east-1")
                .withCredentials(new AWSStaticCredentialsProvider(credential)).withForceGlobalBucketAccessEnabled(true)
                .build();

        s3Client.getClientConfiguration().setMaxConnections(100);

Загрузка в метод S3

public void uploadToToS3() {
        _logger.info("Number of record to be processed in current thread: : " + records.size());


        TransferManager tm = new TransferManager(s3Client);

        MultipleFileUpload upload = tm.uploadFileList(bucketName, "", new File(fileLocation), records);

        if (upload.isDone() == false) {
            System.out.println("Transfer: " + upload.getDescription());
            System.out.println("  - State: " + upload.getState());
            System.out.println("  - Progress: " + upload.getProgress().getBytesTransferred());
        }
        try {
            upload.waitForCompletion();
        } catch (AmazonServiceException e1) {
            _logger.error("AmazonServiceException " + e1.toString());
        } catch (AmazonClientException e1) {
            _logger.error("AmazonClientException " + e1.toString());
        } catch (InterruptedException e1) {
            _logger.error("InterruptedException " + e1.toString());
        }
        System.out.println("Is Upload completed Successfully ="+upload.isDone());

        for (File file : records) {
            try {
                Files.delete(FileSystems.getDefault().getPath(file.getAbsolutePath()));
            } catch (IOException e) {
                _logger.error("IOException in file delete: " + e.toString());
                System.exit(1);
                _logger.error("IOException: " + e.toString());
            }
        }

        _logger.info("Calling Transfer manager shutdown");
        // tm.shutdownNow();
    }

Нужно ли что-нибудь закрывать, чтобы сгладить загрузку?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...