跳转至

性能测试面试题

性能测试面试重点包括压测方案设计、工具使用、瓶颈定位和结果分析。

性能测试有哪些类型?

常见类型:
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 录脚本、加断言 能设计参数化、关联、分布式压测
方案设计 能按模板写压测方案 能根据业务场景设计压测模型
瓶颈定位 能看监控数据 能从监控→日志→代码逐层定位
报告输出 能整理数据出报告 能分析瓶颈原因、给出优化建议