头图
原文由周小丽发表于TesterHome社区,点击原文链接可以和作者直接交流

如果 jmeter 达不到预期的性能指标,可查看压测机器的性能,是否因为内存、网络、cpu 占用导致的瓶颈。

一、端口不够用

压测的线程数过多时,或者线程没有及时释放,会导致 TCP/IP 连接端口已达到最大限制,jmeter 会报错
【报错信息】Non HTTP response code:java.net.BindException
【原因分析】windows 提供给 TCP/IP 连接的端口号是 1024-5000,并且要四分钟左右循环回收,这就导致我们短时间内频繁调用大量请求时,端口号被占满
【解决方案】修改系统的最大端口连接数

TCP 客户端和服务器连接时,客户端必须分配一个动态端口,默认情况下这个动态端口的分配范围为 1024-5000 ,也就是说默认情况下,客户端最多可以同时发起 3977 个 Socket 连接。我们可以修改如下注册表来调整这个动态端口的范围
[HKEY_LOCAL_MACHINE \System \CurrentControlSet \Services \Tcpip \Parameters]
MaxUserPort = 5000 (Default = 5000, Max = 65534)

二、线程数

【异常现象】大量请求出现连接失败,或者压测的错误率异常高,但服务器性能并没上去
【原因分析】线程数已达到瓶颈
【解决方案】循环创建线程,勾选 keep-alive(一般默认是勾选的),可复用线程,即一个 http 请求处理完之后,另外一个 http 请求会从这个连接走

三、内存不足

【异常现象】jmeter 安装目录下产生大量很大的.hprof 文件
【原因分析】这种.hprof 文件的产生是内存泄漏引起的
【解决方法】
windows 环境下,修改 jmeter.bat:
set HEAP=-Xms256m -Xmx256m
set NEW=-XX:NewSize=128m -XX:MaxNewSize=128m
改为:
set HEAP=-Xms256m -Xmx1024m
set NEW=-XX:NewSize=128m -XX:MaxNewSize=512m
PS:heap 最多设置为物理内存的一半,默认设置为 512M.如果 heap 超过物理内存的一半,可能运行 jmeter 会慢,甚至出现内存溢出,原因 java 比较吃内存,占 CPU.

四、建议

1、定期清理 jmeter 生成的日志文件:jmeter.log 和 jmeter-server.log(安装目录下)
2、压测线程数过大时,可采用分布式压测,以命令行执行方式,别使用 GUI 方式压测

TPS:事务数/秒 一个事务可能包含多个查询
QPS:查询数/秒(每秒响应的请求数)
QPS(TPS):每秒钟 request/事务 数量
并发数: 系统同时处理的 request/事务数
QPS(TPS)= 并发数/平均响应时间

比如说报错率在某一次中超过了预期,则该值时已经存在性能瓶颈;tps 达到某一值时,不升反降,则该值存在性能瓶颈;响应时间的值开始缓慢增加后来剧增,则达到性能瓶颈。

以上是今天的分享,你学废了吗~
想学习更多干货知识和前沿技术?
想结识测试行业大咖和业界精英?
欢迎关注2022 MTSC大会(第十届中国互联网测试开发大会)↓↓↓


TesterHome
35 声望20 粉丝

TesterHome社区,测试之家:是由众多测试工程师组织和维护的技术社区,致力于帮助新人成长,提高测试地位,推进质量发展。