Я пытаюсь загрузить огромное количество файлов с 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();
}
Нужно ли что-нибудь закрывать, чтобы сгладить загрузку?