现象描述:
系统支持多文件分片上传,而且支持进度条实时更新。月底当用户集中大批量做文件上传时,文件经常上传到100%就会卡主。按F12打开管理控制台,报错:“XMLHttpRequest:网络错误 0x2eff”;后台日志发现大量异常信息。
org.springframework.web.multipart.MultipartException: Could not parse multipart servlet request; nested exception is org.apache.commons.fileupload.FileUploadBase$IOFileUploadException: Processing of multipart/form-data request failed. Stream ended unexpectedly
解决思路:
我们使用的上传组件是WebUploader,分片大小是1M,上传最大线程数:4,并且上传过程中还要不断计算分片的MD5值,所以怀疑当月末上传并发量很大的情况下,会对服务器处理和带宽造成不小的压力,单个分片上传的时间可能会超时。所以考虑调整tomcat的配置。
解决方案:
在tomcat的server.xml中加入如下配置
<Connector port="9060" protocol="HTTP/1.1"
connectionTimeout="300000" disableUploadTimeout="true"
minProcessors="50" maxProcessors="375" acceptCount="500"
redirectPort="5443" URIEncoding="UTF-8"/>
其中:
connectionTimeout:设置连接的超时值,以毫秒为单位。默认值为60000=60秒
disableUploadTimeout:允许Servlet容器,正在执行使用一个较长的连接超时值,以使Servlet有较长的时间来完成它的执行,默认值为false
maxProcessors:最大连接线程数
acceptCount:指定当所有可以使用的处理请求的线程数都被使用时,可以放到处理队列中的请求数,就是被排队的请求数,超过这个数的请求将拒绝连接。