JAVA下FTPClient操作卡死问题分析解决

    最近在做一个FTP数据下载功能,在部署到生产环境的时候发现FTP操作出现不规律的卡死现象,程序运行到 FTPClient.listFiles()就停止不动,程序捕获不到任务异常,就一直卡着,导致轮训工作瘫痪。

         为了解决这个问题,我对FTPClient设置了ConnectTimeout、DataTimeout、DefaultTimeout,但是在生产环境中问题依旧存在。又经过一翻研究之后发现,FTPClent需要使用被动模式,在调用FTPClient.listFiles()或FTPClient.retrieveFile()这两个方法之前,调用FTPClient.enterLocalPassiveMode();这个方法的意思就是每次数据连接之前,FTPClient告诉FTPServer开通一个端口来传输数据。为什么要这样做呢,因为FTPServer可能每次开启不同的端口来传输数据,但是在linux上,由于安全限制,可能某些端口没有开启,所以就出现阻塞。OK,问题解决。

      

你可能感兴趣的:(JAVA下FTPClient操作卡死问题分析解决)