解决问题的博客:探索新思路,共同成长 🌱
欢迎来到我的博客!在这里,我将分享我对问题的独特见解和解决方案。通过这篇博客,我希望能够为您带来新的思考方式,启发您寻找问题的不同角度,并探索创新的解决方案。
每个问题都是一个机会,是一个学习的过程。在这里,我将分享我对问题的思考过程和解决方案,希望能够激发您思考,激励您不断进步。
我非常期待听到您的想法、建议和反馈!请随时在评论区分享您的观点,让我们一起交流,一起学习,共同成长。
让我们开始探索问题的世界吧!一起迎接挑战,一起前行!✨
壹、出现背景
在前端上传文件之后,业务工作流程发起失败。当时定位问题①文件问题②流程出现问题。登录正式服K8S看后端报错,发现出现java.io.IOException报错。
2024-04-17 15:45:58.504 [http-nio-9091-exec-8] ERROR c.b.c.w.e.GlobalExceptionHandler - Failed to parse multipart servlet request; nested exception is java.io.IOException: org.apache.tomcat.util.http.fileupload.FileUploadException: java.io.EOFException: Unexpected EOF read on the socket
org.springframework.web.multipart.support.StandardMultipartHttpServletRequest.handleParseFailure(StandardMultipartHttpServletRequest.java:124) org.springframework.web.multipart.support.StandardMultipartHttpServletRequest.parseRequest(StandardMultipartHttpServletRequest.java:115) org.springframework.web.multipart.support.StandardMultipartHttpServletRequest.<init>(StandardMultipartHttpServletRequest.java:88) org.springframework.web.multipart.support.StandardServletMultipartResolver.resolveMultipart(StandardServletMultipartResolver.java:87)
org.springframework.web.servlet.DispatcherServlet.checkMultipart(DispatcherServlet.java:1178) org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1012)
org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:943) org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)
org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909)
javax.servlet.http.HttpServlet.service(HttpServlet.java:652)
org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)
javax.servlet.http.HttpServlet.service(HttpServlet.java:733) org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
org.springframework.web.filter.CorsFilter.doFilterInternal(CorsFilter.java:92)
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
org.springframework.web.filter.CorsFilter.doFilterInternal(CorsFilter.java:92)
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)
.....
贰、排查方向
通过请教大佬同事和查询网上资料,三个方向①minio上传出现问题②前端单次请求后端发送文件数量太多③前端多次请求后端发送文件数据很多
叁、场景复现
1、放单个大文件
#之前的后端配置
spring.servlet.multipart.max-file-size=30MB
spring.servlet.multipart.max-request-size=35MB
出现
the request was rejected because its size (168076944) exceeds the configured maximum (36700160)
排除这个问题引发文件EOF的问题
2、修改后端请求其他服务器时间
可能是spring tomcat 请求时间超时
#Ⅰ:修改后端配置 模拟文件上传远程minio
spring.servlet.multipart.max-file-size=2048MB
spring.servlet.multipart.max-request-size=2048MB
server.connectionTimeout =180000
#Ⅱ:修改上传Minio接口
Thread.sleep(1700000);
由于前端超时设置为3分钟,所以决定后端线程睡2min50sec,再上传大文件,没问题
发现,不是后端请求minio服务器的文件上传出现问题
3、多次请求多个文件
前端请求23次uploadfile接口,没问题
4、单词请求多个文件
尝试了很多次文件排列,
最后前端更改请求超时时间为10秒,
调用一次uploadfile文件先放13个小文件(<100kb),7个中文件(≤ <10mb),3个大文件(≤ <200mb)
成功出现
2024-04-17 19:45:33.333 [http-nio-9091-exec-8] ERROR c.b.c.w.e.GlobalExceptionHandler - Failed to parse multipart servlet request; nested exception is java.io.IOException:
复现成功!
肆、解决方案
①防止流程出现其他错误,增大后端服务器接受前端文件的总大小
spring.servlet.multipart.max-file-size=200MB
spring.servlet.multipart.max-request-size=200MB
②修改前端一次请求等待时间延长到3分钟
感谢您阅读我的解决问题的博客!我希望这篇文章能为您提供有价值的见解,并帮助您解决面临的挑战。我非常欢迎您就我的方案提出任何意见、建议或纠正,因为您的反馈对我来说非常宝贵。文章来源:https://www.toymoban.com/news/detail-857235.html
如果您发现任何错误或有任何疑问,请随时在评论区留言,我将非常乐意与您交流并改进我的观点。您的支持和鼓励是我不断前行的动力,希望您能继续关注我的博客,并与我分享您的想法。文章来源地址https://www.toymoban.com/news/detail-857235.html
谢谢您的阅读和支持!一起学习,一起成长!🌟
到了这里,关于【方案探讨】 出现java.io.IOException解决方法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!