我有一个挂在FileOutputStream.close()
上的应用程序(实际上它挂在原生FileOutputStream.close0()
上,但不管怎样)。还有..。我真的不知道是什么原因造成的。Java/Linux调试专家如何解决这个问题?
我用jstack
找到了犯罪现场,如下所示:
s3-transfer-manager-worker-1" #22 prio=5 os_prio=0 tid=0x00007f9f40007800 nid=0x2e6 runnable [0x00007f9fac4d7000]
java.lang.Thread.State: RUNNABLE
at java.io.FileOutputStream.close0(Native Method)
at java.io.FileOutputStream.access$000(FileOutputStream.java:53)
at java.io.FileOutputStream$1.close(FileOutputStream.java:356)
at java.io.FileDescriptor.closeAll(FileDescriptor.java:212)
- locked <0x00000005c3bbc440> (a java.io.FileDescriptor)
at java.io.FileOutputStream.close(FileOutputStream.java:354)
at sun.nio.ch.FileChannelImpl.implCloseChannel(FileChannelImpl.java:139)
at java.nio.channels.spi.AbstractInterruptibleChannel.close(AbstractInterruptibleChannel.java:115)
- locked <0x00000005c3bbc600> (a java.lang.Object)
at com.amazonaws.util.IOUtils.closeQuietly(IOUtils.java:70)
at com.amazonaws.services.s3.internal.ServiceUtils.appendFile(ServiceUtils.java:473)
at com.amazonaws.services.s3.transfer.internal.CompleteMultipartDownload.call(CompleteMultipartDownload.java:46)
at com.amazonaws.services.s3.transfer.internal.CompleteMultipartDownload.call(CompleteMultipartDownload.java:29)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
下载代码
以下是我们的S3下载代码的简化版本:
AmazonS3Client s3Client = new AmazonS3Client(new DefaultAWSCredentialsProviderChain());
s3Client.setRegion(...);
TransferManager s3TransferManager = TransferManagerBuilder.standard().withS3Client(s3Client).build();
GetObjectRequest objectRequest = new GetObjectRequest(...);
Path localTempFile = Files.createTempFile(...);
Download downloadHandle = s33TransferManager.download(objectRequest, localTempFile.toFile());
downloadHandle.waitForCompletion();
很不错的香草味。
背景
这是Java AWS S3 API将文件下载到本地磁盘的一种非常简单的用法。我可以使用aws s3 cp ...
命令行应用程序下载相同的文件。更令人困惑的是,这个应用程序以前工作得很好。它有大约1000个这样的文件要下载,在开始下载之前,它已经下载了其中的11个。
我知道的事情:
这些文件都很强大,每个大约20 GB,,
sudo reboot
).
m4.2xlarge
EC2
aws s3 cp ...
命令行从S3下载完全相同的文件到完全相同的位置,这就排除了以下问题:(again).
TransferManager
正在做一些非常不同的事情,并且下载速度很慢:在命令行上下载文件只需要大约5分钟。
下一步?
不幸的是,我所知道的并不足以让我在调试中走得更远。是否有特定的Linux指标或命令需要检查,以查看系统资源是否已耗尽或死锁?
https://stackoverflow.com/questions/52950030
复制相似问题