中高级性能测试(压测)面试题
一、性能测试开展过程:
第一步:确定好需求,先产品明确那些接口需要压测,需要达到什么样的预期值(TPS和响应时间)
第二步:编写测试计划,明确时间、人员、任务的分配安排
第三步:环境搭建
第四步:造数据
第五步:场景测试(单接口基准测试、单接口压力测试、混合接口测试、稳定性测试) 第六步:结果分析,提交测试报告
第七步:等待开发性能调优,复测
二、交付一个性能测试项目,请阐述你的性能测试流程 (偏高级的回答)
答:1:明确测试需求
2:基于需求设计测试用例,测试方案,测试计划
3:准备测试数据,测试账号(预估并发量),设计测试脚本(参数化,表达式,断言,控制器)
4:运行测试脚本,数据监听(响应时间,tps,活动线程),结果分析(判断性能瓶颈)
5:基本性能瓶颈做调优(tomcat 线程池,jvm 内存,swap 内存,带宽)
6:调优之后做性能回归,和前期结果做对比,是否有明显的优化。
7:代码问题优化(自己定位或者交给开发定位)
8:性能测试报告。整理性能测试数据(包括调优之前和调优之后)
9:构建持久化的性能监听平台,监听线上的服务性能
性能测试贯穿项目始终,从需求分析到上线之后,都需要持续跟踪分析发现问题,响应解决
问题
三、什么是负载?有哪些负载模式?
答:负载就是对服务器迭代式加压,从而寻求性能测试拐点
1:用户模式。不断增加的用户数带来的压力
1 个用户 1s 内发起 20 个请求,rps=20/s
2:请求模式,不断增加的请求数带来的压力
10 个用户,1s 用户 1s 内发起 1 个请求,rps=10/s
不能单纯的通用用户去衡量压力,直接通过每秒请求数去衡量压力。直接从服务端考虑
四、请描述什么是系统性能拐点?
答:性能开始急剧下降的点
五、压力工具的工作原理是什么?
答:jmeter的工作原理:基于协议,通过多线程的方式模拟用户行为,设计各种场景压测服务端,得到性能数据,分析性能瓶颈
六、性能测试基本思路是什么?
答:1、测什么:明确测试目标(明确需求)
2、怎么测:怎么设计场景?
测试计划,测试用例,测试方案、数据准备、参数化,表达式,断言、场景设计(并发,负载,压测) 得到性能测试结果、测试结果验证
验证结果数据是否符合预期
如果预期响应时间是 3s,但是实际结果响应时间达到了 5s 不合格预期最大 tps 需要达到 500,但是实际最大的 tps 只有 300 不合格
七、前端性能测试关注哪些点?了解哪些前端性能优化方法?
答:首屏时间:页面完全展现需要的时间
白屏时间:页面第一帧画面出现之前的时间脚本加载时间,fps,cpu,network
前端性能优化:使用缓存,压缩图片,压缩 js,css,gc 回收优化,js 前置
八、解释常用的性能指标的名称与具体含义
答:1、用户角度
响应时间(rt)从发起请求,到接口响应,到页面渲染 错误率(error)
2、 服务端角度
rps(request persecond)每秒请求数,用户发起的tps(transaction persecond)每秒完成事物数,服务端决定的通过 rps 指标,来测试 tps,从而衡量服务端性能。
3、浏览器层面
qps(query perecond)每秒查询接口数(uv pv) 刷新一次页面,调用了三个接口
hps(hit persecond)每秒点击率
九、性能测试类型有哪些?
按顺序描述答:并发数先确定
基准测试(得到性能数据,为后续的回归测试做理论依据) 单接口基准测试
容量基准测试负载测试
不断增加负载量(压力),一直到瓶颈点出现,可以停止压力测试
1:稳定性压测
假设瓶颈点在 300tps,用对应的负载量的 80%-90%做持续性(几小时或者几天)的压测。目的是发现稳定性问题(内存溢出等等)
2:破坏性压测
用对应负载量的 100%或者 150%做压测,直接让服务器出现异常。目的是及早的暴露问题失效恢复测试
服务端出现异常之后能不能及时恢复
十、什么是集合点?设置集合点有什么意义?
答:集合点更多的运用在并发测试
为了让压力尽可能的落在同一个时间点
十一、什么是固定等待和隐式等待?
答:固定等待:超时时间=0
线程数一定要>=集合数。一定要集合完毕才发起请求 隐式等待:超时时间>0
达到超时时间范围,无论集合多少线程都会发起请求
十二、你在测试中遇到过哪些性能问题?
答:h5 页面响应时间过长
h5 的分页经常卡死,sql 查询过多,数据量过大导出 excel 时间过长,页面 503,后台报内存溢出
功能涉及到算法的时候,一定要在测试环境用大量数据去模拟 只要点击,后台 cpu 立刻就是 300%
十三、你在性能场景设计中用到哪些方法?
答:参数化,关联,断言,jdbc 连接
十四、什么是关联,如何动态关联?有哪几种关联的方法?
答:正则关联,json 关联,xpath 关联
保证接口上下游是衔接的
十五、如果用户并发要慢慢加载,你怎么设置的?
设置并发数的时候,我们会设置启动时间,比如说设置50个并发用户数就是50个线程组,启动时间会设置成10秒,让用户慢慢启动起来
十六、jmeter 负载测试中怎么保持 session 会话?
答:${ setProperty(cookie${counter},${COOKIE_beegosessionID},)} 存储 session
${ P(cookie,)} 从属性表提取 session
十七、什么是 Ramp up?你如何设置?
答:线程启动的时间
ramp 越大,单位时间内的压力越小。ramp=0 表示单位时间压力无穷大,线程启动时间无穷小。ramp=0 不代表时间为 0
十八、如何识别性能瓶颈?
答:随着负载不断升高,tps 也是不断升高的,正常逻辑
随着负载不断增加,tps 不再增加,甚至下降。表示单位线程的 tps 实际在衰减。tps 的瓶颈点
十九、什么是内存溢出?
答:1:运行需要的内存大于空间剩余内存;会出现内存溢出
2:垃圾无法进行 GC;会出现内存溢出
二十、简述 cpu 的工作原理
答:分析 cpu 参数:lscpu
CPU(s): 2 cpu 个数
Thread(s) per core: 1 每核的线程Core(s) per socket: 1 每个卡槽的核Socket(s):
2 每个 cpu 的卡槽双 cpu,4 核多线程;每个 cpu 是双核;
cpu 负载和利用率
可运行的进程(双 r)+不可中断的进程(block)
running(运行中的)+runnable(等待运行的)+block(等待 io)=cpu 的负载
利用率:cpu 双线程如果都在调度 java 进程,表示当前 cpu 利用率是 100%;
cpu 双线程如果只有一个 java 进程在调度,表示当前 cpu 利用率是 50%;
最理想的情况:每个 cpu 线程都调度一个 java 进程,此时的负载=4;
不理想的情况:java 进程数远大于 cpu 线程数,此时负载会远远超出 cpu 线程数;不能及时调度的进程就会排
队;
cpu 会给运行中的和等待运行的进程数均匀分配时间片;
cpu 调度是以时间片为基准的;假设调度时间为 1ns,调度超出 1ns 之后,进程会被挂起;切换到下一个进程 队列越长,cpu 时间片就越小,调度时间就会越短,切换的越快;切换的过于频繁,cpu 利用率就会很低,线
程也会暂停
进程是最小资源分配单元; 线程最小调度单元;
二十一、什么是上下文切换?哪些场景会存在上下文切换?
答:1:线程的切换
切换的时间加载寄存器和计数器
保存数据和位置信息,然后切换到下一个线程并读取它的数据和位置信息
2:进程切换
3:特权切换
系统调用(切换两次上下文)
用户空间向内核空间发起申请,内核空间返回 api 给用户空间调用;
二十二、什么是 swap 空间?oomkiller 了解吗?怎么开启 swap 空间
答:swap:从磁盘空间开辟的虚拟用户空间。
app接口测试工具cat /proc/sys/vm/swappiness 查看 swap 比例
当内存空间使用超出了比例,会启用 swap 空间(内存交换)
so 换出
si 换入
swapon -a 启用 swap
sudo sysctl vm.swappiness=10 临时修改 swappiness 比例
vim /f 永久修改 swappiness 比例
二十三、什么是进程优先级?
答:pr 和 ni
ni 范围 -19---+20,ni 值越小,进程优先级越大;ni 越大,进程优先级越小; 优先级越高的进程,优先调度 cpu,时间片分配的越多;
二十四、吞吐量大幅度波动有哪些原因?
答:上下文切换的过快;
gc 次数过于频繁;
二十五、哪些现象说明了 IO 瓶颈?
答:await=io 等待时间=io 处理时间+io 队列时间
svctm=io 处理时间
await 与 svctm 的差值越大,表示队列时间越长
util 磁盘繁忙度,值越大,磁盘越繁忙;
二十六、了解哪些资源监控命令?
答:top 家族
top,htop,atop,iftop(查看网络),iotop(查看 io) sysstat 家族
vmstat vmstat 1 10
mpstat mpstat -P ALL 1 10 查看逻辑 cpu iostat iostat -x -k -d 1 10 查看 io 处理netstat 查看网络情况
pidstat 查看进程
二十七、如何用命令行生成测试报告?
答:jmter -J{参数名} -r{host} -n -t XX.jmx -l XX.jtl -e -o httpreport
二十八、线程数是压的越多越好吗?压到多少线程合适?
答:线程受压力产生机的CPU和内存影响较大,并且jmeter是基于响应原理工作(一个线程在发出请求并得到应答后才会继续发出下一个请求)
一般情况下不超过500,默认从100线程开始施压,根据实际处理能力来调整线程数大小
二十九:压测返回数据报错,你怎么去定位问题?
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论