【问题标题】:No space left on device on AWS S3 tomcat 8AWS S3 tomcat 8 上的设备上没有剩余空间
【发布时间】:2017-06-29 02:05:04
【问题描述】:

我正在使用以下代码写入现在有很多 xml 文件的 S3 存储桶。我收到“设备上没有剩余空间”错误。后续上传失败。我看到在 var/cache/tomcat8/temp 文件夹中创建了很多文件。我正在通过我的代码删除文件。有人可以帮我理解这里有什么问题吗?实际上,我们希望在将临时文件上传到 S3 后立即删除它。

Path path = Files.createTempFile(filename, suffix);
file = path.toFile();

Files.write(path, incomingXml.getBytes(StandardCharsets.UTF_8));

if(file!=null){
    file.deleteOnExit();
}
s3client.putObject(new PutObjectRequest(fullBucketPathByDate, filename, file));
LOGGER.info("Upload completed");

【问题讨论】:

    标签: java amazon-web-services tomcat amazon-s3 amazon-elastic-beanstalk


    【解决方案1】:

    来自File.deleteOnExit docs(强调我的):

    请求此抽象路径名表示的文件或目录 被删除当虚拟机终止时

    这意味着只有在您关闭 Tomcat 进程后才会删除临时文件。您需要做的是在完成将文件上传到 S3 后立即删除该文件。像这样的:

    Path path = Files.createTempFile(filename, suffix);
    file = path.toFile();
    
    Files.write(path, incomingXml.getBytes(StandardCharsets.UTF_8));
    
    if(file!=null){
        s3client.putObject(new PutObjectRequest(fullBucketPathByDate, filename, file));
        file.delete();
    }
    LOGGER.info("Upload completed");
    

    或者,考虑将文件内容直接流式传输到 S3,而不使用临时文件。

    【讨论】:

    • 感谢您的帮助!
    猜你喜欢
    • 2020-12-16
    • 1970-01-01
    • 2020-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-29
    相关资源
    最近更新 更多