最近在学习 jmeter
1.分别用阶梯压测插件 Stepping Thread Group 和普通压测跑了相同时间,发现吞吐量差了一倍多,这是什么原因
区别是使用阶梯压测时,单接口使用压测,接口勾选了 keepalive ,发现压测跑了一会之后接口请求报错,查了一下说是端口满了,在服务器看了一下,端口大于默认设定的端口值了,然后把 keepalive 去掉了,可以正常压测了,但是发现压力机到服务区的 tcp 链接数只有 20 几个
阶梯式压测截图:
普通压测截图:
你压阶梯和压普通 2 种线程并发量肯定是不一样的,当然吞吐量不一样啊,关注性能的话,还是关注 tps 更直接,吞吐量还受网络因素影响
我截图里阶梯并发 50 个线程时吞吐量只有 4500 左右,而普通 50 个线程有 13000 的吞吐量,这差异也太大了,这不都是 50 个线程并发吗。
你这截图是 GUI 模式?不是 jmeter 不建议用 GUI 模式跑压测么。。。顺便问问,一个查询接口,返回一个 html 结构,可能几十到几百 k 吧,cpu 内存占用都不高,但是 tps 只有几十,性能问题除了带宽满了之外还可能是什么问题,数据库处理速度吗?
用 GUI 在本地跑方便一点,我电脑性还可以,并且并发需求没那么大,你这我猜是服务器内部处理不过来了,你可以看看服务器的日志有没有报错,或者 JVM 设置的不对
阶梯压测插件影响性能
平均响应时间 3ms 的接口,压力有到服务端吗?
关掉 keepalive?可是实际用户不关这个东西吧
这不是还有个 beanshell sampler 吗....顺序的,干了两个活
你的接口平均响应时间本身就很短,勾不勾 keepalive 当然差别会很大,不勾选意味着每一个请求都要重新建立连接(从你的测试结果看完成三次握手的时间,已经相当于一次请求服务响应时间)。另外,端口不够用,尝试修改服务器的的内核参数
端口数我已经改到 6 万多了,可是还不够用,我猜和这个插件有关,即使我勾选了 keep-alive,这个插件持续在建立新的请求,反而普通压测没有端口数占用的问题,一直是复用的
1.勾选 keep-alive 的话,每个线程只建立一个连接,超时时间到之后,才会建立新的连接(正常有多少个并发,就有多少个连接),如果后端服务通过 nginx 代理,检查下 nginx 是否开启了 keepalive,以及超时时间配置。
2.按照你的问题描述,在勾选 keep-alive 的时候,根据你的并发量,tcp 连接数达不到 6W+,尽管你的端口配置参数是 6W,但如果通过 nginx 的话,还有文件描述符的问题(默认 1024)
3.你的吞吐量差异原因,不在于插件,就在于是否勾选了 keep-alive