前几天开始服务器时不时无法accept新连接,由于线上环境的原因都没时间调试直接重启了事
昨天频繁发生了几次,仔细看了下系统日志发现:1java.net.SocketException: Too many open files
用netstat看发现有大量的CLOSE_WAIT,搜索发现与libcurl的处理类似,apache-commons的HttpClient也默认保持了连接待复用处理。
解决办法:
每次使用完都完全关闭连接
1httpmethod.setRequestHeader("Connection", "close");使用统一的连接管理器复用连接,例如SimpleHttpConnectionManager,从连接管理器里获取连接,然后定时的用连接管理器来释放空闲连接。在比较频繁的抓取项目中推荐复用连接