最近现场一个问题折磨了我好久,问题是这样的。程序使用异步线程从装置上取文件,通过http连接从设备上读取流之后保存到ftp服务器上,开始都是正常的,过了半个多小时线程会堵塞,导致所有的装置都没有上传声纹,开始以为是装置没有声纹文件,后来查看装置都是正常的在生成声纹文件,那阻塞的原因在哪里,通过日志发现第一个发生阻塞的线程,每次都是执行到这句程序ftpClient.storeFile(name,inputStream),就不往下执行,因为ftp我开了日志打印,所以正常的ftp保存文件都是150 OK to send之后都会回复一个226 transfer complete。但是在发生阻塞的时候永远收不到226 transfer complete。说明肯定是上传的地方出现了问题。
问题定位到了就好解决,网上一通乱找发现都是说要设置被动模式,但是我本身就是被动模式啊,然后没办法只能从线程本身着手,我设置了异步线程10s没完成就结束这个任务,没想到还是不成功。那么只能从问题本身着手了,看了好久,不清楚为什么正常的时候226 transfer complete都会返回,但是阻塞就一直不返回。真是纳闷,后来现场的人反馈说,每次阻塞的时候总有一个设备是离线的状态!明白了,是不是流的问题,然后查看流有设置connectTimeOut但是没有设置readTimeOut。前一秒装置把连接给我,后一秒装置就挂掉了,导致ftpClient一直没办法导致读流成功,好的设置上流的readTimeOut现场就没反馈说过有这个问题了!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)