2018-03-15更新:弄明白connection reset产生的原因,见重新分析connection reset by peer, socket write error错误原因

在开发文件上传功能时遇到了connection reset by peer, socket write error的错误,排查废了一番功夫,记录一下。

在网上搜索了一下,得到的原因有这些:

  1. 服务器的并发连接数超过了其承载量,服务器会将其中一些连接Down掉;
  2. 客户关掉了浏览器,而服务器还在给客户端发送数据;
  3. 浏览器端按了Stop;

但是看了服务器,不太可能;网络状况了也挺好(测试环境而已)。
跟浏览器也没关系,因为这里上传文件使用的是apache httpclient在上传文件,而且timeout都设置比较长。

最后分析到的问题原因,出在服务端上。服务端是这么处理的:上传文件时在header里含有了文件信息,上传文件成功,记录文件相关信息在DB;如果再次上传这个文件,根据header的文件信息在DB判断是否已经上传,如果确认是重复文件,则直接返回“文件重复”。(这个业务设计有点bug,暂时忽略)

但是现在却遇到重复上传时,客户端httpclient报了“connection reset by peer, socket write error”的错误。

是由于在重复上传时,服务端只取了header就判断了文件重复直接response了,这个时候客户端还在“欢快”的传输文件呢,而服务端直接response把连接关闭了,所以客户端就懵逼了,报了错误。

这个问题暂时还没有找到技术上如何解决(如果找到,后面再补充),所以在业务上进行解决的。在客户端遇到SocketException时,尝试重新上传前,先查询服务端是否已经完成了此文件的上传,如果已经存在,则不用重复上传了,也就可以避免因为重复上传导致的问题,毕竟重复上传也是为了保证在网络不佳时能补偿。

connection reset by peer, socket write error问题排查的更多相关文章

  1. 重新分析connection reset by peer, socket write error错误原因

    上次写<connection reset by peer, socket write error问题排查>已经过去大半年,当时把问题"敷衍"过去了. 但是此后每隔一段时 ...

  2. spring+ibatis问题1—— 程序报错:java.sql.SQLException: Io 异常: Connection reset by peer, socket write error; ”或“java.sql.SQLException 关闭的连接”异常

    转自:http://blog.sina.com.cn/s/blog_1549fb0710102whz2.html spring+ibatis程序测试时报错:java.sql.SQLException: ...

  3. jmeter测试文件上传接口报错:connection reset by peer: socket write error

    最近在对文件上传接口性能测试时,设置150线程数并发时,总会出现以下错误:connection reset by peer: socket write error 在网上搜索了一下,得到的原因有这些: ...

  4. Error -27780: Connection reset by peer: socket write error

    Problem Description: Error: "-27780: read to host failed: [10054] Connection reset by peer" ...

  5. Jmeter遇到线程链接被重置(Connection reset by peer: socket write error)的解决方法

    做性能测试的时候遇到一个很奇怪的问题,多线程的计划,有一个线程第一次能跑过,第二次确跑不过,单独跑这个线程跑多少次都没有问题,把思考时间改短也没有问题,唯独出现在特定的状态下,特定状态是啥,也不得而知 ...

  6. Connection reset by peer: socket write error 连数据库出现改错

    1.网络原因 2.从池中获取连接后没有释放到池中导致的

  7. Connection reset by peer问题分析

    extremetable导出excel,弹出一个下载窗口,这时不点下载而点取消,则报下面的异常: ClientAbortException Caused by: java.net.SocketExce ...

  8. atitit.故障排除------有时会错误com.microsoft.sqlserver.jdbc.SQLServerException: Connection reset by peer: soc

    atitit.故障排除------有时会错误com.microsoft.sqlserver.jdbc.SQLServerException: Connection reset by peer: soc ...

  9. Connection reset by peer的常见原因及解决办法 RST 大文件上传

    Connection reset by peer的常见原因及解决办法 Connection reset by peer的常见原因 - 简书 https://www.jianshu.com/p/263e ...

随机推荐

  1. html manifest 离线配置

    HTML5 引入了应用程序缓存,这意味着 web 应用可进行缓存,并可在没有因特网连接时进行访问. 应用程序缓存为应用带来三个优势: 离线浏览 - 用户可在应用离线时使用它们 速度 - 已缓存资源加载 ...

  2. WebApi跨域问题解决

    因为第一次用webapi,并且还是前后台分离,所以设置到了跨域,在百度上找了很多解决办法,但是基本都存在缺陷,我这里分享一下我自己的经验 1.首先配置Web.config 这样配置发布到服务器就可以跨 ...

  3. jquery.validate弹窗验证

     $(document).ready(function () { //开始验证        $("#form1").validate({            submitHan ...

  4. C# LINQ(5)

    目前都是说的单数据差距,如果多数据进行查询LINQ该如何呢? 那么LINQ就应该使用关键字 join on equals 现有代码: static void Main(string[] args) { ...

  5. iOS No suitable application records were found. Verify your bundle identifier 'xxx' is correct.

    1.错误提示 打包工程,Validate 的时候提示: No suitable application records were found. Verify your bundle identifie ...

  6. NSSet集合

    前言 NSSet:集合 NSSet 集合跟数组差不多,但 Set 集合不能存放相同的对象,它是一组单值对象的集合,被存放进集合中的数据是无序的,它可以是可变的,也可以是不变的. Xcode 7 对系统 ...

  7. jmeter函数助手(_random、_time)

    jmeter函数助手 __random __time yyyyMMddHHmmdd  时间格式(年月日时分秒) 1.打开函数助手对话框,选项->函数助手对话框 2.生成函数字符串 (1)选择功能 ...

  8. mac下对NTFS格式的磁盘进行读写操作

    mac对NTFS格式的分区读写有很大的限制,网上看到很多相关的文章,都表明了一个信息:需要购买类似NTFS for mac这样的软件才能实现对NTFS格式的分区读写的权限,其实不然,mac自带的hdi ...

  9. 使用vue-cli脚手架搭建项目,保存编译时出现的代码检查错误(ESLint)

    一.问题 出现这么写错误是什么原因呢?相信很多小白都会像我一样,第一次接触时有点二丈和尚摸不着头脑.其实是在你用vue-cli脚手架构建项目时用了ESLint代码检查工具,如下图 那么什么是ESLin ...

  10. 自动化上传图片,路径driver.find_element_by_id("oper-img-change").send_keys("C:\\Users\\76776\\Pictures\\logo.jpg"),为正确姿势,单\报错 'unicodeescape' codec can't decode bytes in position XXX: trun

    自动化上传图片,路径driver.find_element_by_id("oper-img-change").send_keys("C:\\Users\\76776\\P ...