現象描述:
系統支持多文件分片上傳,而且支持進度條實時更新。月底當用戶集中大批量做文件上傳時,文件經常上傳到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:指定當所有可以使用的處理請求的線程數都被使用時,可以放到處理隊列中的請求數,就是被排隊的請求數,超過這個數的請求將拒絕連接。