用httpClient的PostMethot频繁发送数据,抛出Too many open files

在工作过程中,用httpclient去压测一个web api,发现压一小段时间就出现了Too many open files。
实际上,HttpClient建立Socket时 ,post.releaseConnection()并没有真正关闭连接,而是将该连接提交给 MultiThreadedHttpConnectionManager,等待复用。
而http的连接是等待timeout才会自动断开的,所以,当用完系统的句柄后,自然会报Too many open files。
解决办法:
设置post方法的header,增加

post.addRequestHeader( "Connection", "close");
client.getParams().setBooleanParameter( "http.protocol.expect-continue" , false );

或者增加linux句柄数

用ulimit -a (Linux服务器)查看open files项为多少,若为默认的1024, 则编辑/etc/security/limits.conf,
在limits.conf加上
*            soft        nproc           10240
*            hard        nproc           10240
*            soft        nofile          10240
*            hard        nofile          10240
保存退出;

用ulimit -n 10240修改root的open files为10240  

  

 

原文地址:https://www.cnblogs.com/JAYIT/p/7562169.html