Java-AWS-打开的文件太多

Java-AWS-打开的文件太多,java,amazon-s3,amazon-web-services,Java,Amazon S3,Amazon Web Services,我使用JavaAWSSDK从一个S3存储桶下载大量文件,编辑这些文件,然后将它们复制回另一个S3存储桶 我认为它应该工作得很好,但有一句话总是给我带来例外: 当我使用 myClient.getObject(myGetObjectRequest, myFile) 我收到一个AmazonClientException,说打开的文件太多了 现在,每次我下载一个文件,编辑它并将其复制回bucket时,我都会删除我创建的临时文件。 我假设删除文件需要几毫秒的时间,也许这就是为什么我会出现这些错误

我使用JavaAWSSDK从一个S3存储桶下载大量文件,编辑这些文件,然后将它们复制回另一个S3存储桶

我认为它应该工作得很好,但有一句话总是给我带来例外:

当我使用

    myClient.getObject(myGetObjectRequest, myFile)
我收到一个AmazonClientException,说打开的文件太多了

现在,每次我下载一个文件,编辑它并将其复制回bucket时,我都会删除我创建的临时文件。 我假设删除文件需要几毫秒的时间,也许这就是为什么我会出现这些错误。 或者可能是因为亚马逊那边的开放文件

不管怎样,我让我的应用程序在每次遇到这个异常时休眠3秒钟,这样它就有时间关闭文件,但这太花时间了。即使我把它缩短到1秒

有人遇到过这个问题吗? 我该怎么办


谢谢

你真的在某个时候调用了“myFile.close()”吗?

这是在linux上吗?看看增加的限制,谷歌的Ulimit是的,它是在Linux上。我会检查一下(尽管我真的不想乱搞操作系统设置…)。谢谢。我以前在AWS上见过这个问题,ulimit是唯一的解决办法。哦,好的。我一定要试试。谢谢。请注意,如果您没有像Angel的答案中的注释那样关闭文件,这不会有任何帮助,请稍微延迟一下。我不熟悉Java中文件的“close()”方法。不过我确实使用了“myFile.delete()”。无论如何,我不是直接写入文件,而是使用AWS SDK方法。“getObject()”方法将S3 bucket中的对象直接写入文件。删除文件只会将其从所在目录中删除,不会真正删除inode和在其仍然打开时使用的块。那么,我是否正确地理解了这一点:您没有使用“流”或“读者”或“作者”这类具有“关闭”方法的工具?请检查您的文档。文件需要明确地关闭,它们不会自行神奇地关闭(除非文件对象最终确定,但这可能会发生)。这就是问题所在,我正在使用AWS工具包中的方法写入文件,所以我没有使用任何读卡器或写卡器。我不确定它是否会关闭流,但我假设它会关闭。“它们不会自行神奇地关闭”,除非您使用java 7和新的资源尝试,但我怀疑op是。好吧,如果您可以发布更多的源代码,我们可以帮助您浏览AWS的文档,但我们不知道您正在做什么。。。