背景
在图片上传的过程中,后台总是会看到很多这种异常的报错,对于客户端而言是一个超时中断的报错。
org.apache.tomcat.util.http.fileupload.impl.IOFileUploadException: Processing of multipart/form-data request failed. java.io.EOFException: Unexpected EOF read on the socket
异常原因
文件上传整个过程(请求->响应)还在进行中断开了连接,客户端连接中断
,或者服务器请求时间超时
。
也就是说文件已经被上传到了服务器,正在处理中还没有结束,没到末尾就被客户端中断,超过了tomcat连接的最大时长后被关闭掉了。
探查
经过运维的一番查询,发现是美国当地的APP用户在发起请求的时候,流量转到了澳大利亚的网关,然后再通过澳大利亚的网关转发请求到美国的服务器上面,绕了一大圈子,怪不得耗时很高,以至于客户端都已经把链接中断了,服务端还没有处理完请求,导致了异常的发生,当运维重新调整好配置之后,变恢复正常了。
如果真的是文件太大或者要处理的逻辑很多的话,基于Spring Boot可以进行以下配置,直接在application配置文件里加上一个tomcat连接时长
server.connectionTimeout =180000
对应地 增加客户端的请求超时时间
配置, 或者增加服务端的连接超时时间
配置。
代码层面优化:减少请求到代码中的处理时间,若不关心处理结果,可以改为异步处理
,这样就可以很快响应。
本篇文章如有帮助到您,请给「翎野君」点个赞,感谢您的支持。