性能测试

性能测试

 

1、jmeter报告上的指标有哪些?

1) 请求数、平均响应时间、百分之90、95、99的响应时间、吞吐量、错误占比

2) jmeter 资源插件:cpu、内存、交换内存、磁盘IO

 

2、90%代表什么意思?

将所有请求的响应时间从小到大排序,取排在90百分位的响应时间值

 

3、性能测试关注哪些指标?

1、吞吐量、响应时间、错误率、资源占用率

2、资源占用率包含的指标:

(1) cpu:cpu占比、cpu平均负载、

(2) 内存:剩余内存、交换内存、从磁盘到内存,从内存到磁盘的页面数

(3) IO:cpu等待IO的时间占比、IO磁盘利用率、平均IO队列长度,>1有堆积的可能

3、响应时间默认小于1秒

4、错误率小于0.01~0.05

5、资源占用率,cpu内存、磁盘、网络,小于80%

补充:

(1) 吞吐量

① tps 每秒事物数

② qps 每秒查询数

③ rps 每秒请求数

(2) 大型OA 50~200

 

4、你用什么命令查看这些资源指标?

 1、CPU 相关指标(vmstat)

· us(用户态 CPU 使用率)

  • 不超过80%

· sy(系统态 CPU 使用率)

  • 不超过20%

· id(CPU 空闲时间百分比)

  • 30% 以上

· wa(CPU 等待 I/O 操作完成的时间百分比)

  • wa 值应尽量低,通常在 5% 以下较为理想。如果 wa 值较高,说明 CPU 花费了较多时间等待 I/O 操作完成,可能存在磁盘 I/O 瓶颈。

· 命令Top:动态查看cpu所占百分比,不超过85%  虚拟核,top -p pid

· 命令uptime:Cpu 1分钟、5分钟、15分钟的平均负载,要低于物理核,lscpu 可查看物理核和虚拟核

 

 2、内存相关指标(vmstat)

free(空闲的物理内存大小)

  • 留物理内存的 20% 作为空闲内存,以应对突发的内存需求。

· swpd(已使用的交换内存大小)

  • 理想情况下,swpd 应尽量为 0。如果 swpd 值较大且持续增长,说明系统物理内存不足,开始频繁使用交换空间,这会严重影响系统性能。

si(每秒从磁盘交换到内存的页面数)和 so(每秒从内存交换到磁盘的页面数)

  • 正常情况下,si 和 so 的值应该接近于 0。如果这两个值持续较高,表明系统正在频繁进行内存和磁盘交换空间之间的数据交换,意味着系统内存紧张。

 

3. I/O 相关指标(vmstat)

  • 如果cpu等待IO的时间占比5% 以下比较理想,超过10%~20%,则说明磁盘I/O存在问题,考虑提高磁盘I/O读写性能
  • 磁盘利用率 %util 不超过 70%
  • 平均IO队列长度,>1有堆积的可能

 

4、进程相关指标(vmstat)

  • r(运行队列中的进程数)
    • 一般来说,r 值应保持在 CPU 核心数的 2 倍以内。例如,对于一个 4 核 CPU 的系统,r 值长期超过 8 可能意味着系统负载较高,有进程在排队等待 CPU 资源。
    • b(等待 I/O 的进程数)
      • b 值通常应尽可能接近于 0。如果 b 值持续较高,说明有较多进程在等待 I/O 操作完成,可能存在磁盘 I/O 瓶颈。

 

 

5、怎么制定业务指标?

1. 测试登录开户申购业务,19点~21点高峰值,登陆4万8次请求,开户3万,购买6万次请求。就可以知道每个业务接口最大tps 登录最大tps=48000/7200=6.7;开户最大tps=30000/7200=4.1;购买最大tps=60000/7200=8.3

2. 混合业务怎么算比例?

(1) 19点~21点,登录请求数48000,开户请求数3000,购买请求数6万,

(2) 登录业务比例=48000/(48000+30000+60000)= 35%

(3) 开户业务比例=30000/(48000+30000+60000)= 22%

(4) 购买业务比例=60000/(48000+30000+60000)= 43%

3、最大并发人数计算方式

(1) 平均日活7000,19点~21点,7200秒,登录开户购买7分钟,420秒

(2) 并发人数 = (7000*420)/7200=408 不可能7000人都来,取80%=323~408

6、你们项目是怎么开展性能测试的?你们项目的压测场景是怎么设置的?

(1) 确认业务指标。同上。

(2) 平均响应时间小于1秒;

(3) 错误率0.010.05

(4) cpu、内存、磁盘、网络小于80%

(5) 基准测试。无压力情况下的1个请求,持续10分钟。

① 平均响应时间328ms

(6) 容量测试。阶梯形势不断压测。

① 并发350,最大TPS 420

② 平均响应时间800ms多

③ 性能拐点,并发400,错误率升至1.2%

(7) 稳定性测试。覆盖业务指标的最优持续7个小时测试。

① 并发350的条件下,7小时平均tps 是387

② 平均响应时间900ms多,系统无报错

③ 内存从4.2增到4.8,正常

(8) 异常测试

① 在高峰值,模拟数据库宕机,自动恢复后,业务是否可以正常进行。网络IO在数据库服务关闭和重启会陡增,之后会恢复到正常。

② redis 切换。在切换的过程中,0错误,响应时间会增大一些,tps会降低一些,响应时间超过3秒,影响时长40秒。

6、怎么实现每秒并发400?

 

image

 

(1) 一共设置400个线程

(2) 每秒增加10个,增加到400后持续5分钟

(3) 每秒减掉10个线程

7、jmeter 与locust 结果差异很大的原因?

特性

JMeter

Locust

协议实现

基于Java线程(1线程=1用户)

基于Python协程(1线程模拟数千用户)

资源消耗

高内存(每个线程独立栈空间)

低内存(协程轻量级切换)

并发模型

阻塞式(受限于线程数)

非阻塞式(异步IO)

 

 

8、你们项目中最大最优并发数是如何评估的?

最大:是系统奔溃之前

最优:是符合业务指标

 

 

9、你们在项目中有没有碰到高并发是怎么处理的?

1)、并发人数大于500~1000的时候,单机持续cpu、内存、网络大于80%,用分布式压测。

(2)、master、slave 安装版本相同的jmeterjdk

(3)、master上修改jmeter配置文件,添加slave的ip、端口号

(4)、slave上修改jmeter配置文件,配置端口号

(5)、在slave 上启动jmeter服务

(6)、master 执行jmx压测文件

 

10、你们在性能测试中发现了什么问题是怎么解决的?

在压测一键赎回功能。

(1) jmeter插件监控图,响应时间陡升、tps陡降。

(2) 正常情况下,top =80% uptime 每一分钟cpu的平均负载值是3点多,但是top = 50%, uptime 每一分钟cpu的平均负载值就3点多了,可能发生了等待。vmstat cpu wa 高达45%

(3) 原因:大额赎回,触发系统高频校验

(4) 建议,单笔超过1000万,启用异步清算流程

补充:

mysql慢查询定位

grafana mysql最大连接数、mysql等待锁、慢查询(可以在配置文件设置慢查询时间,会将慢查询倒在一张表里,帮助开发定位具体sql)不要超过1s。type=all 全表搜索导致。

redis 分析程过

1、错误率飙升

2、看jenins日志没有问题

3、看服务器日志,是连接池不够

4、CONFIG GET * 查看redis 连接数,默认1万,并发3000,也够

5、查看项目的配置文件,redis 最大池子配置的1000

 

11、你们是怎么分析性能瓶颈以及进行性能调优的?

思路:网络->服务器配置->压力机配置->JVM->中间件->数据库->系统架构nigx

 

12redis

(1) 通用操作

① keys *、del key、exists key、expire key、ttl keytype key

(2) string

① set key、get key

(3) hash

① hset key field value、hget key fileid

(4) list

① lpush key element、rpush key element、lpop key、rpop key、lrange key start end

(5) 无序set(添加多个标签、黑白名单、抽奖去重)

① sadd key member

② srem key member

③ sinter key1 key2 交集

④ sdiff key1 key2 差集

⑤ sunion key1 key2 并集

(6) 有序sortedset(实时排名)

① zadd key score member、zrem key member、zrevrange key 0 9 10名、zscore key member

posted @ 2026-08-16 18:20  东方不败--Never  阅读(16)  评论(0)    收藏  举报