jmeter压测 性能提升

先用jmeter工具测试当前服务端并发数下的性能数量,再根据实际情况逐步提升并发数。

常用命令:

查看进程的线程数量:pstree -p 端口号|wc -l

查看进程的线程数量详情:pstree -p 端口号

查看机器的性能详情:top -H

 

 

load average:最近的1min 10min 15min的load数量(IO数量)

us:用户态下CPU耗时

sy:内核空间对系统的占用

 

 

 

server端并发线程数上不去问题:

在jmeter中逐渐提升并发数,直到出现error,查看当前服务器的线程数量,就得到了最大线程数。

解决:

1、增大容量:修改spring内嵌tomcat中spring-configuration-metadata.json文件下各个节点的配置

{ //设置端口号

"sourceType":"org.springframework.boot.autoconfigure.web.ServerProperties",

"defaultValue":8080,

"name":"server.port",

"description":"Server HTTP port",
"type":"java.lang.Integer" },

{ //设置等待队列大小,默认100

"sourceType":"org.springframework.boot.autoconfigure.web.ServerProperties$Tomcat",

"defaultValue":100,

"name":"server.tomcat.accept-count",

"description":"Maximum queue length for incoming connection requests when ...",

"type":"java.lang.Integer" },

{ //设置线程最小等待数量,默认10

"sourceType":"org.springframework.boot.autoconfigure.web.ServerProperties$Tomcat",

"defaultValue":10,

"name":"server.tomcat.min-spare-threads",

"description":"Minimum number of worker threads",

"type":"java.lang.Integer" },

{ //设置最大可被连接数,默认10000

"sourceType":"org.springframework.boot.autoconfigure.web.ServerProperties$Tomcat",

"defaultValue":10000,

"name":"server.tomcat.max-connections",

"description":"Maximum number of connections that the server accepts and processes...",

"type":"java.lang.Integer" },

{ //设置最大支持线程数,默认200

"sourceType":"org.springframework.boot.autoconfigure.web.ServerProperties$Tomcat",

"defaultValue":200,

"name":"server.tomcat.max-connections",

"description":"Maximum number of worker threads",

"type":"java.lang.Integer" }

可在配置文件中修改(按4核8G配置,具体看机器性能):

application.properties: server.port=80

server.tomcat.accept-count=1000

server.tomcat.max-threads=800

server.tocat.min-spare-threads=100 //用于解决突发请求

 

响应时间变长TPS上不去
经过jmeter测试,单Web容器上限:

线程数量:4核8G内存单进程调度线程数800-1000以上后即花费巨大的时间在cpu调度上

等待队列长度:队列做缓冲池用,但也不能无限长,消耗内存,出队也耗cpu

MySql数据库QPS容量问题:

主键查询(聚簇索引,innoDB也可以设置Buffer缓存):千万级数据 = 1-10毫秒

唯一索引查询:千万级别数据 = 10-100毫秒

非唯一索引查询:千万级别数据 = 100-1000毫秒

无索引(全表扫描):百万级别数据 = 1000毫秒+(不可接受)

非插入更新删除操作:同查询

插入操作:1w~10w tps(依赖配置优化)

JMeter 压测Server Agent无法监控资源问题:

1、确认端口   默认端口4444

lsof -i:4444   查看端口是否占用

2、是否成功启动

 

3、后台运行不中断的命令

nohup sh startAgent.sh &

 

 

性能测试策略
1)加压策略
递进增加并发数,观察tps和响应时间,并记录tps和响应时间,寻找拐点

2)执行策略
a、试压阶段:先按照递进增加选择一个持续时间(具体时间按照不同场景选择,一般选择180S/60S),并发数(根据不同项目决定并发数,一开始可以选择每次增加10,如果增加10发现性能还是挺好,就可以增加多点并发数,缩减测试时间),并记录tps和响应时间,找出拐点
b、重压阶段:找出拐点后,再取拐点的前后5组并发数,重新跑(3-5分钟)再记录详细数据
3)性能测试策略例子:
单接口压测:顾名思义,就是只对一个接口进行压测
混合接口压测:按比例来决定并发数

 

jmeter安装在/usr/local/apache-jmeter-5.6.3

把jmx结尾的脚本上传至/home下,然后在/home下运行以下命令:

jmeter -n -t your_script.jmx -Jthreads=500 -Jrampup=60  -l test.jtl -e -o report_folder/

 

 

 

 

 添加插件

 

 

监听器名词解释:

Active Threads Over Time 随时间推移的活动线程
AutoStop Listener AutoStop侦听器
Bytes Throughput Over Timejp@gc - Composite Graph 字节吞吐量超过Timejp@gc-合成图
Console Status Logger 控制台状态记录器
DbMon Samples Collector DbMon示例收集器
Flexible File Writer 灵活的文件写入程序
Graphs Generator 图形生成器
Hits per Second 每秒点击次数
JMXMon Samples Collector JMXMon示例收集器
Page Data Extractor 页面数据提取器
PerfMon Metrics Collector PerfMon度量收集器
Response Codes per Second 每秒响应代码
Response Latencies Over Time 随时间变化的响应延迟
Response Times Distribution 响应时间分布
Response Times Over Time 随时间变化的响应时间
Response Times Percentiles 响应时间百分比
Response Times vs Threads 响应时间与线程
Synthesis Report (filtered) 综合报告(已筛选)
Transaction Throughput vs Threads 事务吞吐量与线程
Transactions per Second 每秒事务数

 

posted @ 2025-03-06 14:57  我只吃大碗  阅读(220)  评论(0)    收藏  举报