凌峰创科服务平台

LoadRunner如何精准测出服务器性能瓶颈?

LoadRunner 服务器性能测试完整指南

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

LoadRunner如何精准测出服务器性能瓶颈?-图1
(图片来源网络,侵删)

整个流程可以分为三个主要阶段:

  1. 计划与设计
  2. 脚本开发与场景执行
  3. 结果分析与调优

第一阶段:计划与设计

在打开 LoadRunner 之前,清晰的规划是成功的关键。

明确测试目标

首先要清楚你为什么要做这次测试,目标不同,测试的设计和指标也完全不同。

  • 基准测试: 在特定负载下,建立当前系统的性能基准线,用于未来对比。
  • 负载测试: 逐步增加用户数,找到系统的性能拐点,即最大能支持的并发用户数。
  • 压力测试: 持续施加高负载甚至超负荷压力,测试系统的稳定性、极限和恢复能力。
  • 稳定性测试/耐久测试: 在一个较长的时间内(如8小时、24小时),施加中等或高负载,检查是否存在内存泄漏、性能随时间下降等问题。
  • 容量规划测试: 测试服务器资源(CPU、内存、磁盘I/O、网络)在不同用户负载下的消耗情况,为未来扩容提供数据支持。

确定关键业务场景

选择要测试的核心业务流程,这些流程应该是用户最常使用或最重要的功能。

LoadRunner如何精准测出服务器性能瓶颈?-图2
(图片来源网络,侵删)
  • 示例:
    • 电商网站:用户登录 -> 搜索商品 -> 加入购物车 -> 下单支付。
    • 社交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 中,你可以设计一个复杂的测试场景。

LoadRunner如何精准测出服务器性能瓶颈?-图3
(图片来源网络,侵删)
  • 场景类型:
    • 手动场景: 精确控制每个脚本的 Vuser 数量、启动方式和运行时间。
    • 目标场景: 设定一个目标(如达到 100 TPS 或平均响应时间 < 2秒),Controller 会自动调整 Vuser 数量来达到该目标,这对于负载测试和压力测试非常有用。
  • 负载生成器: 一个物理机或虚拟机,用于运行 Vuser,一个 Controller 可以控制多个负载生成器。
  • 思考时间: 模拟真实用户在操作之间的停顿时间(如阅读页面、填写表单),这对于获得真实的性能数据至关重要。

运行场景并监控

这是执行测试并收集数据的过程。

  • 启动场景前:
    1. 连接负载生成器: 确保所有负载生成机都已连接到 Controller。
    2. 添加资源监控: 在 Controller 的“Resources”页面中,添加你要监控的服务器、数据库、应用服务器等。
  • 启动场景:
    1. 启动场景后,Vuser 会根据你的设计开始执行脚本。
    2. 实时监控: 在 Controller 的图表中,实时观察各项性能指标,重点关注:
      • 响应时间曲线: 是否随用户增加而急剧上升?
      • TPS 曲线: 是否达到平台期或开始下降?
      • 服务器资源曲线: CPU、内存、磁盘、网络是否出现瓶颈?
  • 场景运行中:
    • 观察是否有大量 Vuser 失败。
    • 检查服务器日志中是否有大量错误。
    • 如果发现瓶颈,可以提前停止场景,避免无效测试。

第三阶段:结果分析与调优

测试完成后,分析数据并得出结论是最终目的。

生成分析报告

在 LoadRunner Analysis 中,Controller 收集的数据会被处理并生成详细的图表和报告。

  • 概要报告: 快速查看测试的整体情况,如总 TPS、平均响应时间、总吞吐量等。
  • 事务分析: 查看每个事务的响应时间、成功率在不同负载下的表现。
  • Vuser 分析: 查看 Vuser 的运行状态、错误分布。
  • 资源分析: 查看服务器、数据库等资源的详细使用情况图表。

定位性能瓶颈

这是分析的核心,通常遵循自下而上的原则:

  1. 定位瓶颈点:
    • 响应时间急剧上升的点: 找到哪个用户数级别后,响应时间开始恶化。
    • TPS 达到平台期或下降的点: 这通常是系统的最大处理能力。
    • 资源达到瓶颈的点: 找到是 CPU、内存、磁盘还是网络首先达到 100%。
  2. 分析瓶颈原因:
    • CPU 100%:
      • 应用层: 代码效率低(死循环、复杂计算)、SQL 语句未优化导致数据库计算量大。
      • 数据库层: 缺少索引、全表扫描、锁竞争。
    • 内存 100% / Swap 频繁:
      • 应用层: 内存泄漏、配置了过大的缓存。
      • 数据库层: 查询缓存过大、排序操作导致内存溢出。
    • 磁盘 I/O 高:
      • 数据库层: 频繁的随机 I/O(未命中索引)、日志写入量大。
      • 应用层: 大量读写临时文件。
    • 网络带宽满:

      返回的数据量过大(如未分页的大查询)、大文件传输。

    • 数据库瓶颈:

      慢查询、连接池耗尽

分享:
扫描分享到社交APP
上一篇
下一篇