一,问题描述
用postman调用上传接口,基本每两次调用会有一次报错,如下
{
"timestamp": "2023-04-11T03:00:15.469+0000",
"status": 500,
"error": "Internal Server Error",
"exception": "org.springframework.web.multipart.MultipartException",
"message": "Could not parse multipart servlet request; nested exception is java.io.IOException: org.apache.tomcat.util.http.fileupload.FileUploadBase$IOFileUploadException: Processing of multipart/form-data request failed. /tmp/tomcat.476807474335553889.8040/work/Tomcat/localhost/ROOT/upload_18b82282_3d69_4839_aa73_fa4f2d02893b_00000427.tmp (No space left on device)",
"path": "/userService/oss/uploadFile"
}
二,问题排查
先排查日志,上传成功的服务有对应日志,失败的没有日志,说明失败请求没有到上传服务
1》.上传文件会先上传到服务器的临时文件,临时文件有定时清理机制,文件被清理了,所以报上面错误
依据:
/tmp/tomcat.476807474335553889.8040/work/Tomcat/localhost/ROOT/upload_18b82282_3d69_4839_aa73_fa4f2d02893b_00000427.tmp (No space left on device)
对应的解决方案
1.在其他位置新建临时文件存储路径,不放在默认临时文件中tmp,这样就不会被清理
2.设置tomcat.文件不被清理
3.重启,重启会重新生成临时文件
参考:
FileNotFoundException /tmp/tomcat.26341039_Erwinl的博客-CSDN博客
上传文件突然报错/tmp/tomcat_/tmp/tomcat.3780801945149811830.8904/work/tomcat/l_he_xiao123的博客-CSDN博客
2》.磁盘空间不足
依据:No space left on device
三,结论
尝试了,在上传服务器,新建临时文件与重启服务均未解决,磁盘空间占用也不大
原因:
没有找到问题点,应该先排查网关服务的问题,不应该直接看上传接口对应的服务器,所以上面解决方案前提都是错误的。以上问题在网关服务排查一遍,发现两台网关中有一台磁盘空间满了,重启后,上传接口正常了,解释了为什么上传时成功一次失败一次。
参考这篇文章
No space left on device问题解决记录_caohl04的博客-CSDN博客
四,临时文件与删除策略
临时文件
按理说临时文件默认在tmp/tomcat.........,但这个目录下并没有上传照片信息,是空的
删除临时文件配置
疑问
1.这里配置自动删除临时文件是tmp,为什么上传文件没有存在这里,实际存在哪里
2.磁盘空间占满,是哪里满了,哪里的临时文件
3.D /tmp 1777 root root -
这个命令中 - 是什么意思,没有配置具体天数,是不是临时文件不会删除
如果把这个替换成具体天数,是否可实现定时自动删除临时文件,但问题排查后,上传图片信息又不在这个临时文件中