LoadRunner 服务器性能测试完整指南
LoadRunner 的测试核心思想是 “模拟”,它通过成千上万的虚拟用户(Virtual Users, Vusers)来模拟真实用户的行为,对服务器施加压力,从而测试服务器在不同负载下的性能表现。

整个流程可以分为三个主要阶段:
- 计划与设计
- 脚本开发与场景执行
- 结果分析与调优
第一阶段:计划与设计
在打开 LoadRunner 之前,清晰的规划是成功的关键。
明确测试目标
首先要清楚你为什么要做这次测试,目标不同,测试的设计和指标也完全不同。
- 基准测试: 在特定负载下,建立当前系统的性能基准线,用于未来对比。
- 负载测试: 逐步增加用户数,找到系统的性能拐点,即最大能支持的并发用户数。
- 压力测试: 持续施加高负载甚至超负荷压力,测试系统的稳定性、极限和恢复能力。
- 稳定性测试/耐久测试: 在一个较长的时间内(如8小时、24小时),施加中等或高负载,检查是否存在内存泄漏、性能随时间下降等问题。
- 容量规划测试: 测试服务器资源(CPU、内存、磁盘I/O、网络)在不同用户负载下的消耗情况,为未来扩容提供数据支持。
确定关键业务场景
选择要测试的核心业务流程,这些流程应该是用户最常使用或最重要的功能。

- 示例:
- 电商网站:用户登录 -> 搜索商品 -> 加入购物车 -> 下单支付。
- 社交App:用户登录 -> 查看好友动态 -> 发布一条新动态 -> 点赞。
- 企业系统:员工登录 -> 查看考勤记录 -> 提交报销申请。
定义性能指标
你需要监控哪些数据来判断性能好坏?这些指标通常分为三类:
- LoadRunner 内置指标 (Vuser/事务):
- 响应时间: 从发出请求到收到第一个字节的时间,这是最重要的用户体验指标。
- 吞吐量: 每秒系统处理的数据量(通常以 Bytes/sec 或 Pages/sec 表示)。
- 每秒事务数: 每秒成功完成的事务数量,衡量系统的处理能力。
- 成功率: 成功执行的事务占总事务的百分比。
- 错误率: 失败的事务占总事务的百分比。
- Vuser 状态: 运行、等待、完成、错误等。
- 服务器端指标 (通过 LoadRunner Controller 或其他工具监控):
- CPU 使用率: 是否达到瓶颈(> 70%-80% 需警惕)。
- 内存使用率: 是否有内存泄漏,是否使用到虚拟内存(Swap/Page File)。
- 磁盘 I/O: 磁盘读写速度是否成为瓶颈。
- 网络 I/O: 网络带宽是否被占满。
- 数据库指标:
- CPU: 数据库服务器的CPU使用率。
- 缓存命中率: 命中率低意味着频繁查询磁盘。
- 锁等待时间: 时间过长说明存在并发瓶颈。
- 连接数: 数据库连接池是否耗尽。
- 应用/中间件指标:
- 应用服务器线程池/工作队列: 是否积压。
- JVM (Java) / GC (垃圾回收) 频率和时间: 频繁或长时间的GC会导致应用卡顿。
- Web服务器 (如 Nginx, Apache) 连接数: 是否达到最大连接数限制。
第二阶段:脚本开发与场景执行
这是 LoadRunner 的核心操作阶段。
脚本录制与开发
LoadRunner 使用 C 语言(VuGen)来编写脚本。
- 录制: 打开 VuGen,选择协议(如 Web - HTTP/HTML),输入起始URL,然后像真实用户一样操作业务流程,VuGen 会自动录制下你的 HTTP/HTTPS 请求。
- 参数化: 为了模拟不同用户,需要将固定的数据(如用户名、密码、搜索关键词、订单ID)替换成参数,这是 模拟真实负载的关键一步,数据可以从文件(CSV)或数据库中读取。
- 关联: 当服务器返回的响应中包含一个动态值(如 Session ID, Token),而这个值又是后续请求所必需的时,需要进行关联,VuGen 的“关联向导”可以自动帮助识别和完成这一步。
- 插入检查点和事务:
- 检查点: 验证服务器返回的响应中是否包含预期的内容(如“登录成功”),确保业务逻辑正确。
- 事务: 在一个业务流程的开始和结束处插入事务,用于精确测量该流程的响应时间和成功率。
- 调试与回放: 在 VuGen 中单独运行脚本,确保它能正确无误地执行,没有错误。
场景设计
在 LoadRunner Controller 中,你可以设计一个复杂的测试场景。

- 场景类型:
- 手动场景: 精确控制每个脚本的 Vuser 数量、启动方式和运行时间。
- 目标场景: 设定一个目标(如达到 100 TPS 或平均响应时间 < 2秒),Controller 会自动调整 Vuser 数量来达到该目标,这对于负载测试和压力测试非常有用。
- 负载生成器: 一个物理机或虚拟机,用于运行 Vuser,一个 Controller 可以控制多个负载生成器。
- 思考时间: 模拟真实用户在操作之间的停顿时间(如阅读页面、填写表单),这对于获得真实的性能数据至关重要。
运行场景并监控
这是执行测试并收集数据的过程。
- 启动场景前:
- 连接负载生成器: 确保所有负载生成机都已连接到 Controller。
- 添加资源监控: 在 Controller 的“Resources”页面中,添加你要监控的服务器、数据库、应用服务器等。
- 启动场景:
- 启动场景后,Vuser 会根据你的设计开始执行脚本。
- 实时监控: 在 Controller 的图表中,实时观察各项性能指标,重点关注:
- 响应时间曲线: 是否随用户增加而急剧上升?
- TPS 曲线: 是否达到平台期或开始下降?
- 服务器资源曲线: CPU、内存、磁盘、网络是否出现瓶颈?
- 场景运行中:
- 观察是否有大量 Vuser 失败。
- 检查服务器日志中是否有大量错误。
- 如果发现瓶颈,可以提前停止场景,避免无效测试。
第三阶段:结果分析与调优
测试完成后,分析数据并得出结论是最终目的。
生成分析报告
在 LoadRunner Analysis 中,Controller 收集的数据会被处理并生成详细的图表和报告。
- 概要报告: 快速查看测试的整体情况,如总 TPS、平均响应时间、总吞吐量等。
- 事务分析: 查看每个事务的响应时间、成功率在不同负载下的表现。
- Vuser 分析: 查看 Vuser 的运行状态、错误分布。
- 资源分析: 查看服务器、数据库等资源的详细使用情况图表。
定位性能瓶颈
这是分析的核心,通常遵循自下而上的原则:
- 定位瓶颈点:
- 响应时间急剧上升的点: 找到哪个用户数级别后,响应时间开始恶化。
- TPS 达到平台期或下降的点: 这通常是系统的最大处理能力。
- 资源达到瓶颈的点: 找到是 CPU、内存、磁盘还是网络首先达到 100%。
- 分析瓶颈原因:
- CPU 100%:
- 应用层: 代码效率低(死循环、复杂计算)、SQL 语句未优化导致数据库计算量大。
- 数据库层: 缺少索引、全表扫描、锁竞争。
- 内存 100% / Swap 频繁:
- 应用层: 内存泄漏、配置了过大的缓存。
- 数据库层: 查询缓存过大、排序操作导致内存溢出。
- 磁盘 I/O 高:
- 数据库层: 频繁的随机 I/O(未命中索引)、日志写入量大。
- 应用层: 大量读写临时文件。
- 网络带宽满:
返回的数据量过大(如未分页的大查询)、大文件传输。
- 数据库瓶颈:
慢查询、连接池耗尽
- CPU 100%:
