性能测试面试题¶
性能测试面试重点包括压测方案设计、工具使用、瓶颈定位和结果分析。
性能测试有哪些类型?¶
常见类型:
1. 负载测试:逐步增加并发,观察系统表现
2. 压力测试:超过系统承受能力,看系统怎么"死"的
3. 稳定性测试:长时间运行(4-24 小时),检查内存泄漏、连接泄漏
4. 并发测试:多个用户同时操作,检查数据一致性
5. 基准测试:单用户运行,获取基线数据
面试加分点:能说出你做过哪种类型的性能测试,用了什么工具。
性能测试的核心指标有哪些?¶
三大核心指标:
1. 响应时间(Response Time)
- 平均响应时间
- 90%、95%、99% 响应时间(比平均值更有意义)
2. 吞吐量(TPS/QPS)
- TPS:每秒事务数
- QPS:每秒查询数
3. 错误率(Error Rate)
- 目标:通常 < 1%
辅助指标:
- 并发用户数
- CPU、内存、磁盘 I/O、网络带宽
- 数据库连接数、慢查询数
JMeter 中线程组、Ramp-Up、循环次数怎么理解?¶
线程数:模拟的并发用户数。100 线程 = 100 个虚拟用户。
Ramp-Up Period:所有线程启动的时间。设为 10 秒,100 线程,则每秒启动 10 个线程。
- 设太短:瞬间压力大,不代表真实场景
- 设太长:压力太均匀,测不出峰值
循环次数:每个线程执行请求的次数。
- 选"永远" + 设置持续时间,适合稳定性测试
压测方案怎么设计?¶
1. 确定测试目标
- 响应时间 < 500ms
- TPS > 100
- 错误率 < 1%
2. 确定测试场景
- 优先选高频、核心、涉及资金的接口
- 场景:登录、搜索、下单、支付
3. 准备测试数据
- 足量的数据(不能用空库压测)
- 数据隔离(压测数据不能影响正常业务)
4. 设计压测模型
- 阶梯加压:10 → 50 → 100 → 200 → 500
- 持续施压:固定并发运行 10-30 分钟
- 脉冲测试:突然加大压力再恢复
5. 监控和分析
- 服务端:CPU、内存、磁盘、网络
- 应用层:JVM、线程池、连接池
- 数据库:慢查询、连接数、锁等待
响应时间飙升怎么排查?¶
排查步骤:
1. 看监控:CPU、内存、磁盘 I/O 哪个先到瓶颈
2. 看数据库:是否有慢查询、锁等待、连接池满
3. 看应用:线程池是否满、GC 是否频繁
4. 看网络:是否有丢包、延迟
5. 看代码:是否有同步锁、循环调用、N+1 查询
常见原因:
- 数据库缺索引 → 全表扫描
- 连接池不够 → 请求排队
- 内存不足 → 频繁 GC
- 第三方接口超时 → 线程被阻塞
什么是性能拐点?¶
性能拐点 = 系统从"正常"变成"恶化"的临界点
表现为:
- 并发增加但 TPS 不再增长(甚至下降)
- 响应时间突然飙升
- 错误率开始上升
找到拐点的方法:阶梯加压,画出"并发数-TPS-响应时间"曲线图,拐点就是曲线的转折处。
性能测试报告包含什么?¶
1. 测试背景:为什么做、测什么
2. 测试环境:服务器配置、网络、数据库版本
3. 测试场景:哪些接口、什么压测模型
4. 测试结果:TPS、响应时间、错误率(含图表)
5. 监控数据:CPU、内存、数据库指标
6. 瓶颈分析:发现的问题和根因
7. 优化建议:具体可执行的改进方案
JMeter 和 LoadRunner 有什么区别?¶
JMeter:
- 开源免费
- 支持多协议(HTTP、JDBC、FTP、WebSocket 等)
- 插件丰富,社区活跃
- 适合中小团队和接口压测
LoadRunner:
- 商业软件,价格高
- 协议支持最全面(包括 SAP、Citrix 等企业应用)
- 有专业的分析报告
- 适合大型企业和复杂场景
什么是全链路压测?¶
全链路压测 = 在生产环境对整个业务链路进行压力测试
特点:
- 不是单接口压测,是从用户入口到数据库的完整链路
- 使用生产环境的真实配置
- 需要流量标记,区分压测流量和真实流量
- 需要数据隔离,压测数据不进入正式库
核心挑战:
- 如何构造影子数据库
- 如何标记和隔离压测流量
- 如何不影响真实用户
面试评分参考¶
| 维度 | 初级(1-2年) | 中级(3-5年) |
|---|---|---|
| 工具使用 | 会用 JMeter 录脚本、加断言 | 能设计参数化、关联、分布式压测 |
| 方案设计 | 能按模板写压测方案 | 能根据业务场景设计压测模型 |
| 瓶颈定位 | 能看监控数据 | 能从监控→日志→代码逐层定位 |
| 报告输出 | 能整理数据出报告 | 能分析瓶颈原因、给出优化建议 |