专栏首页FunTesterMac+httpclient高并发配置实例

Mac+httpclient高并发配置实例

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

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

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

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

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

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

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

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

这个配置允许使用49151个端口,与上面那个设置略有冲突但不影响,有兴趣童鞋可以去原贴看看。(由于微信不能发外链,各位点击阅读原文查看原帖,大概需要科学使用)

下面是httpclient设置:

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

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

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

还有一个设置kipeAlive属性的,这里就不发代码了,因为我看到这个方法的代码里面用的还是SimpleHttpConnectionManager连接池管理类,而我用的4.5已经不推荐这个了,现在用的是PoolingHttpClientConnectionManager类,所以抱有一丝疑惑。在实际的使用中,并没有发现对连接池性能有特别明显的提升。故而放弃了这个方法。

第二种是在设置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的区别:
		1、MaxtTotal是整个池子的大小;
		2、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,暂时未见到本机的瓶颈。希望能对各位有点帮助。

本文分享自微信公众号 - FunTester(NuclearTester),作者:八音弦

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-08-15

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Selenium4 IDE特性:无代码趋势和SIDE Runner

    「Selenium4 IDE」并不完美,但其优点在于,它不仅仅是功能强大的记录和回放工具。尽管不能认为它是广泛用于Selenium测试自动化的Selenium ...

    FunTester
  • 我的开发日记(十四)

    项目进入测试,心里慌慌,第一次提测项目,总感觉怪怪的。提测第一天,组内的同事体验了一下,当日无BUG,感觉还行,处理一下由于配置导致的问题,不算是BUG,一天就...

    FunTester
  • 利用python+plotly 制作接口响应时间Distplot图表

    本人在做接口测试的过程中,使用了 python+plotly 统计接口信息,之前一直用Violin图表,今天就尝试了一中新的图表,distplot 图表,其实就...

    FunTester
  • 小知识:从官方镜像安装owncloud

    cd /var/www/html/apps && git clone https://github.com/nextcloud/passman.git

    超级大猪
  • k8s中服务添加hosts及一键转换脚本

    项目管理k8s集群用的是rancher,可是rancher没有提供给deployment批量添加hosts的图形化界面,所以还是只能按照k8s官方的方法修改ya...

    Ewdager
  • 用C#实现字符串相似度算法(编辑距离算法 Levenshtein Distance)

    在搞验证码识别的时候需要比较字符代码的相似度用到“编辑距离算法”,关于原理和C#实现做个记录。 据百度百科介绍: 编辑距离,又称Levenshtein距离(也叫...

    Angel_Kitty
  • 【译】Retrofit 2 - 如何从服务器下载文件

    如果你在阅读本文前没有写过任何一行Retrofit请求代码,那么最好看一下前面几篇博客。对于很多Retrofit使用者来说:定义一个下载文件的请求与其他请求几乎...

    小鄧子
  • @Aspect 5种通知详解 | Spring系列第35篇

    这几种通知用起来都比较简单,都是通过注解的方式,将这些注解标注在@Aspect类的方法上,这些方法就会对目标方法进行拦截,下面我们一个个来看一下。

    路人甲Java
  • c++之string.find(string)

    find函数的运用时,如果找到就返回位置,找不到返回的是-1

    CN_Simo
  • 高阶自定义View --- 粒子变幻、隧道散列、组合文字

    高阶自定义View --- 粒子变幻、隧道散列、组合文字 作者:林冠宏 / 指尖下的幽灵 腾讯云+社区:https://cloud.tencent.com...

    林冠宏-指尖下的幽灵

扫码关注云+社区

领取腾讯云代金券