凌峰创科服务平台

LoadRunner压力测试服务器,如何精准评估性能瓶颈?

LoadRunner 压力测试服务器完整指南

第一阶段:测试准备与规划

在打开 LoadRunner 之前,这是最重要的一步,准备不充分,测试结果将毫无意义。

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

明确测试目标

  • 为什么要测试? 是为了验证服务器的性能基准(Benchmark)、查找性能瓶颈、评估系统在高负载下的稳定性,还是为了验证系统能否承受预期的用户量?
  • 要回答什么问题? “我们的新系统能否在 1000 个并发用户下,平均响应时间低于 2 秒?” 或 “数据库连接池在什么情况下会耗尽?”

确定关键业务场景

  • 不要测试所有功能,专注于核心的、高频使用的业务流程。
    • 电商网站:用户登录、浏览商品、加入购物车、下单支付。
    • 社交App:用户登录、刷新信息流、发布动态、评论。
  • 这些场景将是你录制和开发 VuGen 脚本的基础。

识别性能指标

  • 你需要关注哪些数据来衡量服务器性能?
    • 服务器端指标:
      • CPU 使用率: 是否长期高于 80%?是否存在 CPU 瓶颈?
      • 内存使用率: 是否持续增长导致内存溢出?
      • 磁盘 I/O: 磁盘读写是否繁忙?是否存在 I/O 瓶颈?
      • 网络带宽: 网络流量是否达到上限?
      • 数据库指标:
        • 数据库 CPU、内存使用率。
        • 慢查询数量和执行时间。
        • 数据库连接数是否达到上限?
        • 锁等待时间。
      • 应用服务器指标:
        • JVM 堆内存使用情况(针对 Java 应用)。
        • 线程池、连接池状态。
        • GC(垃圾回收)频率和耗时。
    • LoadRunner 端指标:
      • 平均响应时间: 用户操作的平均耗时。
      • 90% 或 95% 响应时间: 大部分用户的响应时间,比平均值更能反映真实体验。
      • 每秒事务数: 系统每秒能处理的事务数,是衡量吞吐量的核心指标。
      • 错误率: 事务失败的百分比,不应超过 1%(具体标准视业务而定)。
      • 吞吐量: 每秒通过网络传输的数据量(字节/秒)。

环境准备

LoadRunner压力测试服务器,如何精准评估性能瓶颈?-图2
(图片来源网络,侵删)
  • 测试环境: 尽可能模拟生产环境的配置(硬件、软件、网络),这是保证测试结果有效性的前提。
  • 监控环境: 在被测服务器上部署监控工具,如:
    • Linux: top, vmstat, iostat, netstat, sar (sysstat 包),或使用 Zabbix, Prometheus + Grafana 等专业监控平台。
    • Windows: 任务管理器、性能监视器。
    • 数据库: 数据库自带的监控工具(如 MySQL 的 SHOW PROCESSLIST, SHOW STATUS)或第三方工具。
  • LoadRunner Controller 机器: 确保其性能足够强大,不会成为测试的瓶颈。

第二阶段:脚本开发

录制脚本

  • 使用 LoadVuGen 录制你在浏览器或客户端上执行的关键业务场景。
  • 建议: 只录制核心流程,去掉不必要的请求(如图片、CSS、JS 文件,除非它们是业务核心)。

参数化

  • 为什么? 避免所有虚拟用户都使用相同的数据(如用户名、密码、搜索关键词),这会导致缓存命中过高,无法模拟真实场景,还可能对后端数据造成污染。
  • 怎么做? 将脚本中的硬编码值(如 username="test1")替换为参数(如 username={param_username}),并从数据文件(如 CSV 文件)中读取。
  • 最佳实践: 为每个虚拟用户分配唯一的数据,可以使用 Unique NumberUnique Name 类型的参数。

添加检查点

  • 为什么? 确保服务器返回了正确的响应,验证业务逻辑的成功执行。
  • 怎么做? 使用 web_reg_find 函数或“图像检查”功能,在服务器响应的 HTML 中查找特定的文本或字符串(登录成功后页面应包含“欢迎,XXX”)。
  • 注意: 检查点文本应该是唯一的、稳定的,不要使用动态变化的值(如时间戳)。

思考时间

LoadRunner压力测试服务器,如何精准评估性能瓶颈?-图3
(图片来源网络,侵删)
  • 为什么? 模拟真实用户的操作节奏,用户在两次操作之间会有停顿。
  • 怎么做? 在脚本中模拟用户操作后,添加 lr_think_time 函数,通常设置为 1-5 秒,或者根据实际情况从数据文件中读取。

关联

  • 为什么? 这是最关键也最复杂的一步,很多应用的响应中包含动态值(如 Session ID, JSessionID, Token),这些值在后续请求中需要被提交回去,关联就是从上一个服务器的响应中“提取”出这个动态值,并赋给一个参数,供后续请求使用。
  • 怎么做?
    1. 在录制时,启用“Enable advanced script correlation”。
    2. 在回放时,观察日志,查找 Error -26377: No match found for the parameter "XXX" 这样的错误。
    3. 使用 Correlation Studio 工具,自动或手动地找到需要关联的动态值,并生成关联代码。
    4. 手动编写关联代码(例如使用 web_reg_save_param 函数)。

脚本调试与优化

  • 单用户回放: 在 VuGen 中以单用户模式多次回放脚本,确保它能 100% 成功运行,没有任何错误。
  • 日志分析: 仔细查看回放日志,定位并修复所有错误(如 HTTP 500, 404, 403 错误)。
  • 资源清理: 在脚本中添加事务结束后的清理操作(如删除创建的数据),避免影响后续测试。

第三阶段:场景设计

选择场景类型

  • 手动场景: 最灵活,可以精确控制每个虚拟用户组的数量、运行时间和负载行为。
  • 目标场景: 设定一个性能目标(如“TPS 达到 500”),LoadRunner 会自动调整虚拟用户数以达到该目标,非常适合用于查找系统的最大处理能力。

配置虚拟用户组

  • 创建一个或多个用户组,每个组代表一类业务场景(如“登录用户组”、“下单用户组”)。
  • 为每个组设置:
    • 虚拟用户数: 并发用户数。
    • 负载行为:
      • Ramp-Up (递增): 在指定时间内,逐步增加虚拟用户数,模拟真实用户逐步涌入的场景。
      • 持续:
      • Ramp-Down (递减): 在测试结束时,逐步减少用户数。

�始化和结束

  • vuser_init: 在所有用户开始执行业务操作前运行,通常用于登录、获取初始 Token 等操作。
  • vuser_end: 在所有用户执行完业务操作后运行,通常用于登出、清理资源。
  • 注意: 这里的操作不计入事务和响应时间统计。

事务配置

  • 在 Controller 中,将脚本中需要关注的核心业务流程(如“登录”、“下单”)定义为“事务”。
  • 这将帮助你精确测量每个步骤的性能,并生成详细的图表报告。

第四阶段:执行与监控

启动监控

  • 在 Controller 的“Resources”菜单中,添加所有需要监控的 Remote Monitor(被测服务器、数据库、应用服务器等)。
  • 确保监控代理已在目标机器上正确安装和运行。

启动场景

  • 点击“Start Scenario”开始执行测试。
  • 实时观察:
    • Vusers 图: 观察虚拟用户是否按预期启动、运行和停止。
    • Transactions 图: 观察事务响应时间和 TPS 的变化。
    • Resources 图: 观察服务器、数据库等各项资源的使用率。

测试过程中的关键动作

  • 寻找拐点: 观察图表,寻找性能急剧下降的点,TPS 达到峰值后开始下降,或者响应时间突然飙升,这个拐点通常揭示了系统的瓶颈。
  • 分析瓶颈: 当出现性能问题时,立即查看资源监控图表。
    • CPU 100%,瓶颈可能在应用层或
分享:
扫描分享到社交APP
上一篇
下一篇