Mac+httpclient高并发配置实例

本人近期在作服务端的压力测试,在准备测试脚本的过程当中遇到了一些配置方面的问题,在通过查阅资料和对比结果后总结了在Mac电脑配置和httpclient配置上的经验。分享出来供你们参考。(备注:Science Internet),如下部分解决方案源于Google搜索结果和httpclient官方文档。html

首先在Mac上的上遇到问题是大量端口处于TIME_WAIT状态,这里先不说代码层面的,具体的配置以下:java

下面是修改Mac可用最大链接数和使用端口的相关参数:apache

sudo sysctl -w kern.maxfiles=1048600     最大链接数
sudo sysctl -w kern.maxfilesperproc=1048576  单进程最大链接数

注意单进程与单线程不同。下面是设置端口的:编程

net.inet.ip.portrange.first: 10240   起始值 
 
net.inet.ip.portrange.last: 65535   结束值

还有一个关于临时端口的设置:json

sysctl -w net.inet.ip.portrange.hifirst = 16384 
sysctl -w net.inet.ip.portrange.first = 16384

这个配置容许使用49151个端口,与上面那个设置略有冲突但不影响,有兴趣童鞋能够去原贴看看。传送门api

下面是httpclient设置:多线程

目前我一共查阅了几种方案,一一尝试了一下,说一下结果:并发

第一种设置request请求头的,具体代码以下:框架

method.setRequestHeader("Connection", "close");

还有一个设置kipeAlive属性的,这里就不发代码了,由于我看到这个方法的代码里面用的仍是SimpleHttpConnectionManager链接池管理类,而我用的4.5已经不推荐这个了,如今用的是PoolingHttpClientConnectionManager类,因此抱有一丝疑惑。在实际的使用中,并无发现对链接池性能有特别明显的提高。故而放弃了这个方法。ide

第二种是在设置request.releaseConnection()方法。

method.releaseConnection()

这个方法跟上一个也出出如今httpclient较早的版本里面的,可是并未说不推荐了,这个方法资料比较少。实际使用效果来讲会致使一部分的SocketException,好比超时,好比关闭之类的。故而直接放弃掉了,在普通接口测试中并未比较区别。有兴趣的童鞋能够尝试一下,但愿能告知答案。

第三种是本身定时执行连接的回收,用的是httpclient官方给出的方法写了一个多线程类:

public class GCThread extends Thread {
	private static boolean flag = true;
 
	@Override
	public void run() {
		while (flag) {
			SourceCode.sleep(1);
			ApiLibrary.recyclingConnection();
		}
	}
 
	public static void stopThread() {
		flag = false;
	}
}

设置完上面这些剩下的就是httpclient的相关设置了,本人总结了一下,大概两个方面:链接池设置和超时设置。

链接池设置:

此处解释下MaxtTotal和DefaultMaxPerRoute的区别:
		一、MaxtTotal是整个池子的大小;
		二、DefaultMaxPerRoute是根据链接到的主机对MaxTotal的一个细分;好比:
		MaxtTotal=400 DefaultMaxPerRoute=200
		只链接到某个网站时,到这个主机的并发最多只有200;而不是400;
		每一个主机的并发最多只有200;即加起来是400(但不能超过400);因此起做用的设置是DefaultMaxPerRoute。*/
		connManager.setMaxTotal(MAX_TOTAL_CONNECTION);
		connManager.setDefaultMaxPerRoute(MAX_PER_ROUTE_CONNECTION);

超时设置: RequestConfig.custom().setConnectionRequestTimeout(CONNECT_REQUEST_TIMEOUT).setConnectTimeout(CONNECT_TIMEOUT).setSocketTimeout(SOCKET_TIMEOUT).setCookieSpec(CookieSpecs.STANDARD).build();
附上还httpclient官方文档地址:传送门

我用的httpclient4.5.5的包,本机iMac,并发超过20k,暂时未见到本机的瓶颈。但愿能对各位有点帮助。

往期文章精选

  1. java一行代码打印心形
  2. Linux性能监控软件netdata中文汉化版
  3. 接口测试代码覆盖率(jacoco)方案分享
  4. 性能测试框架
  5. 如何在Linux命令行界面愉快进行性能测试
  6. 图解HTTP脑图
  7. 写给全部人的编程思惟
  8. 测试之JVM命令脑图
  9. 将json数据格式化输出到控制台
  10. 如何测试几率型业务接口
  11. “双花”BUG的测试分享
  12. 将swagger文档自动变成测试代码
  13. Mac+httpclient高并发配置实例

公众号地图 ☢️ 一块儿来~FunTester

相关文章
相关标签/搜索