开发者社区> 问答> 正文

上传文件出现SocketTimeoutException: Read timed?400报错

上传文件出现SocketTimeoutException: Read timed out? 400 报错

使用多线程模拟并发请求上传图片文件时,一共上传100个文件,每次都有3-4个会出现read timed out. 设置了客户端的连接超时时间和服务器端的tomcat连接数,还有超时时间都没有解决这个问题, 请教下各位大神的思路

展开
收起
爱吃鱼的程序员 2020-06-02 13:58:16 669 0
1 条回答
写回答
取消 提交回答
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB
     <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:指定当所有可以使用的处理请求的线程数都被使用时,可以放到处理队列中的请求数,就是被排队的请求数,超过这个数的请求将拒绝连接。

     

    ######

    几次测试之后发现,maxThreads开到5左右没有出现失败问题, 且上传速度也保持在1秒左右. 但是如果开到10就会出现socket read timed out. 按道理这个并发线程开的大一点应该更快才对,为什么反而更慢,而且还会超时呢.

    ######maxThreads默认是200,能否dump一下超时的堆栈信息######

    @淘淘我的小宝宝  感觉应该是图片服务器没有响应客户端导致的

     

     

    ######

    客户端的异常信息

    ######

    问题解决,原因是server.maxHttpPostSize=102400000这里设置过大,导致每次请求服务器都会默认占用将近100M的内存空间,并发稍微高一点就会内存溢出

    2020-06-02 13:58:34
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载