S3传输管理器初始化在Java中非常慢

S3传输管理器初始化在Java中非常慢,java,amazon-web-services,amazon-s3,Java,Amazon Web Services,Amazon S3,我正在对大约300-500个对象(小)的密钥进行下载。总大小约300mb。这也在Ec2实例上运行,所以网络是通过AWS主干网的 System.out.println("Initializing downloader"); MultipleFileDownload downloader = transferManager.downloadDirectory(bucket, keyPrefix, new File(dest)); Syste

我正在对大约300-500个对象(小)的密钥进行下载。总大小约300mb。这也在Ec2实例上运行,所以网络是通过AWS主干网的

    System.out.println("Initializing downloader");
    MultipleFileDownload downloader =
        transferManager.downloadDirectory(bucket, keyPrefix, new File(dest));
    System.out.println("Downloader metadata initialized successfully");

    long percentage = 0;
    while (!downloader.isDone()) {
      percentage++;
      if (percentage % 500 == 0)
        System.out.println(downloader.getProgress().getPercentTransferred() + "% complete");
    }
    System.out.println("Completion Status: " + downloader.isDone());
这一行就在这里:

    MultipleFileDownload downloader =
        transferManager.downloadDirectory(bucket, keyPrefix, new File(dest));

运行大约需要5分钟,甚至在它点击我的for循环开始下载之前。我确实在本地运行了这个程序来可视化分析,我发现大多数时候,线程只是在等待网络I/O启动。为什么会这样?在评测时,我可以看到10个并发线程。

不一定是延迟的原因,但除非您运行S3端点,否则它仍然会进入Internet访问公共S3 API,因此不完全在AWS网络中。如果启用,您将能够准确地看到它在何处花费时间。