O download de arquivos> 3Gb do S3 falha com "SocketTimeoutException: leitura excedeu o tempo limite"

AWS Java SDK 1.9.3

Ao baixar muitos arquivos grandes (~ 3Gb) do AWS S3 no aplicativo para servidor Java, recebo o SocketTimeoutException de tempos em tempos da seguinte forma:

Caused by: com.amazonaws.AmazonClientException: Unable to store object contents to disk: Read timed out
 at com.amazonaws.services.s3.internal.ServiceUtils.downloadObjectToFile(ServiceUtils.java:270)
 at com.amazonaws.services.s3.internal.ServiceUtils.retryableDownloadS3ObjectToFile(ServiceUtils.java:344)
 at com.amazonaws.services.s3.transfer.TransferManager$2.call(TransferManager.java:737)
 ... 4 more
Caused by: java.net.SocketTimeoutException: Read timed out
 at java.net.SocketInputStream.socketRead0(Native Method)
 at java.net.SocketInputStream.read(SocketInputStream.java:152)
 at java.net.SocketInputStream.read(SocketInputStream.java:122)
 at sun.security.ssl.InputRecord.readFully(InputRecord.java:442)
 at sun.security.ssl.InputRecord.readV3Record(InputRecord.java:554)
 at sun.security.ssl.InputRecord.read(InputRecord.java:509)
 at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:927)
 at sun.security.ssl.SSLSocketImpl.readDataRecord(SSLSocketImpl.java:884)
 at sun.security.ssl.AppInputStream.read(AppInputStream.java:102)
 at org.apache.http.impl.io.AbstractSessionInputBuffer.read(AbstractSessionInputBuffer.java:198)
 at org.apache.http.impl.io.ContentLengthInputStream.read(ContentLengthInputStream.java:178)
 at org.apache.http.conn.EofSensorInputStream.read(EofSensorInputStream.java:137)
 at com.amazonaws.internal.SdkFilterInputStream.read(SdkFilterInputStream.java:73)
 at com.amazonaws.event.ProgressInputStream.read(ProgressInputStream.java:151)
 at com.amazonaws.internal.SdkFilterInputStream.read(SdkFilterInputStream.java:73)
 at com.amazonaws.internal.SdkFilterInputStream.read(SdkFilterInputStream.java:73)
 at com.amazonaws.internal.SdkFilterInputStream.read(SdkFilterInputStream.java:73)
 at com.amazonaws.event.ProgressInputStream.read(ProgressInputStream.java:151)
 at java.security.DigestInputStream.read(DigestInputStream.java:161)
 at com.amazonaws.services.s3.internal.DigestValidationInputStream.read(DigestValidationInputStream.java:59)
 at com.amazonaws.internal.SdkFilterInputStream.read(SdkFilterInputStream.java:73)
 at java.io.FilterInputStream.read(FilterInputStream.java:107)
 at com.amazonaws.services.s3.internal.ServiceUtils.downloadObjectToFile(ServiceUtils.java:265)
 ... 6 more

Eu transfiro arquivos do S3 usando 4 threads, todos os threads usam a mesma instância do TransferManager. Conforme mencionado anteriormente, estou usando o AWS SDK 1.9.3 e recebo essas exceções apenas de tempos em tempos. Código é o seguinte:

...
Download d = transferManager.download(currentBucket, remoteFileName, new File(tmpName));
d.waitForCompletion();
...

É um problema do SDK? Talvez da v1.9.3?

E existe alguma solução, exceto aumentarsocketTimeout paraClientConfiguration?

questionAnswers(1)

yourAnswerToTheQuestion