2026/4/6 6:06:30
网站建设
项目流程
网站运维推广怎么做,在线制作印章diy印章,价格低性价比高的手机,广西南宁网站建设在某天#xff0c;突然接到一个需求要对集群某个接口进行性能测试。线上单机器#xff08;4c8g#xff09;集群大概有十几台。线上平常的TPS#xff1a;1500。#xff08;不含突发高流量#xff0c;最近业务的增加#xff0c;这个也是为啥压测了#xff09;
于是乎突然接到一个需求要对集群某个接口进行性能测试。线上单机器4c8g集群大概有十几台。线上平常的TPS1500。不含突发高流量最近业务的增加这个也是为啥压测了于是乎我们就开始吧啦吧啦开会讨论。最开始的问题是怎么模拟线上环境。基于没有性能环境只能自己搞考虑降本增效模拟线上环境成本很高。那么我们就只能找到梯度然后去毛估性能指标。可是怎么找到这个性能指标线性增加理想状态下当乘积的系数翻倍那么结果也是翻倍。可是这不是理想状态下。所以这个梯度就只能我们去压测找出这个增加的趋势是怎么样的。于是乎我就去把测试环境的机器都搞成和线上一样的配置4c8g的然后去压测然后1台2台3台5台。看出增加的趋势。本来测试使用电脑的配置就很低了别说1500可能最多支持500的并发而且还不能持久。所有搞了几台2c4g的机器本来想着是每个机器单独跑无非是切换几次窗口就好了 。后来切切切.....。蒙圈了。然后就想起了分布压测。决定试试。大概就是这样的如下图。比较懒感觉这个图还是很好的就截下图。然后就开始动手了。把我电脑mac 系统当成主压力机liunx压力机linux 机器先配置JDK这里就不说了。自行百度再配置 jmeter。主要就一个环境变量。vi /etc/profile 输入export PATH/opt/apache-jmeter-5.3/bin/:$PATH输入jmeter -v测试下这样就 OK 了。可以在上传文件运行下jmx文件非GUIjmeter -n -t xxx.jmx看到有正常的输出就OK了。命令很简单网上有很多可以看下然后配置下压力机和主压力机连接的配置修改jmeter.properties文件中的 remote_hosts ip本机 ip server.rmi.ssl.disabletrue把jmeter后台挂起nohup jmeter-server 查看下进程或者 ps axu | grep jmeter有就可以了。配置主压力机修改jmeter.propertiesremote_hosts ip压力机ipserver.rmi.ssl.disabletrue。配置完成之后在主压力和压力机上相互进行ping下看看是否有问题。如果平不同分布式就会出问题。jmeter -n -t xxx.jmx -R 压力机ip这样就算是OK的特别要注意几点1.关闭防火墙:firewall-cmd --state //查看防火墙状态。systemctl stop firewalld.service //关闭防火墙2.关闭虚拟网卡3.如果使用 csv 进行参数化需要把参数文件/jar....等文件在每台压力机上拷贝一份最好都放置在bin目录下因为Jmeter会直接从 bin 目录下查找。遇到的坑坑一这个样的问题大概就是网络不同存在多个网卡导致的。解决方案看下主压力机和压力机之间的ip是不是存在多个。配置好对应ip。坑二java.net.SocketException,Non HTTP response message: Connection reset,Non HTTP response code: org.apache.http.NoHttpResponseException,Non HTTP response在1000个线程跑的时间偶尔会出现这样的异常。百度下原因java.net.SocketException:Connection reset 或者 Connect reset by peer:Socket write error。该异常在客户端和服务器端均有可能发生引起该异常的原因有两个第一个就是如果一端的Socket被关闭或主动关闭或者因为异常退出而引起的关闭另一端仍发送数据发送的第一个数据包引发该异常 (Connect reset by peer)。另一个是一端退出但退出时并未关闭该连接另一端如果在从连接中读数据则抛出该异常Connection reset。简单的说就是在连接断开后的读和写操作引起的。解决方案扩容jmeter的初始化参数。修改 jmeter 的分配资源bin/jmeter 文件的xmxxmssize 属性。坑三单机器跑1000线程tps到1500左右。用分布式调用发现tps只有300多。很奇怪。不同的网络导致的网络延迟主 - 压力机 - 被测试机器分别在三个不同的网段中。解决方案把机器分布到同一个网段内。可以看下ping的响应时间。毫秒的差别在高并发的情况下还是有很大的影响的。坑四也是自己学艺不精关于tps的换算。之前一直以为100的线程最高tps100。tps 时间单位是 s。要根据具体的接口响应时间的快慢进行换算。比如接口响应时间10ms。100线程tps最大是1w。压测的过程中tps和响应时间线程数有很多大关联。当响应时间到达某个节点时间tps会下降的。所以压测tps时不能硬件cpu、内存.....等等为性能标准有可能拿到的指标是不准的。还有些没有遇到的坑问题1在slave上linux 系统运行 jmeter-server 时出现 “An error occurred: Cannot start. localhost is a loopback address” 错误解决方案方法一运行以下命令./jmeter-server -Djava.rmi.server.hostname本机 ip方法二修改 jmeter-server 文件 vi jmeter-server 将 jmeter-server 中的 RMI_HOST_DEF-Djava.rmi.server.hostname本机 ip问题2:远程启动slave机器时如出现 “Jmeter nested exception is:java.net.ConnectException connection timed out:connect ” 错误解决方案1.查看 slave 上的 ip 与 master 配置文件中的 ip 是否一致2.查看防火墙是否关闭。问题3当设置csv文件路径时如果路径不对无响应。解决方法将 csv 文件以 “相对路径” 命名即将 csv 文件直接放入 bin 目录下在 Jmeter 路径中直接写入文件名问题4Linux默认端看 1099 被占用如何关闭某个被占用端口的方法1netstat -ntlp //查看当前所以 tcp 端口nestat -ntulp |grep 1109 //查看所有 1109 端口使用情况2lsof -i:1109 //查看占用 1109 端口的程序 pid3kill -9 1109 //kill 掉该进程问题5如果使用 slave 发送数据后长时间无响应问题排查1查看发送的数据中是否存在 csv 参数文件查看 slave 机器的 bin 目录下是否有该文件2查看建立的 tcp 采样器中属性 “TCPClientclassname” 处是否添加协议org.apache.jmeter.protocol.tcp.sampler.BinaryTCPClientImpl问题6如果你的JMeter 返回数据是乱码解决方法在JMeter安装路径的bin目录下打开文件 jmeter.properties把 Sampleresult.default.encoding 的值改为utf-8即可。问题7启动 jmeter 时报错Error occurred during initialization of VM Could not reserve enough space for object heap errorlevel1解决方法1bin 目录下打开 jmeter 文件bin/jmeter 文件的xmxxmssize 属性。问题8当 jmeter 用作数据库 API 测试时如果数据库接口中参数中传递一个数组如 getAppsint nu, int appID[ ],实际使用过程中报语法错误解决方法可尝试在调用该接口传参中加入关键字 “ARRAY”,如 getApps(3, ARRAY[7,8])感谢每一个认真阅读我文章的人礼尚往来总是要有的虽然不是什么很值钱的东西如果你用得到的话可以直接拿走这些资料对于【软件测试】的朋友来说应该是最全面最完整的备战仓库这个仓库也陪伴上万个测试工程师们走过最艰难的路程希望也能帮助到你!有需要的小伙伴可以点击下方小卡片领取