0

我正在尝试使用 JMeter 创建负载测试。我有一个非常简单的测试计划:

  • 包含所有标准的 HTTP Cookie 管理器、缓存管理器等。
  • 包含具有一百万个有效用户名的 CSV 数据集配置。
  • 它访问登录页面并提交用户名以获得授权。
  • 然后它访问一个页面,该页面执行一些数据库请求并
    显示结果。

我可以使用 80 个并发用户和 30 秒的启动时间成功运行它。如果我超出这个范围,事情就会开始恶化。大多数时候测试卡住了,我最终不得不用 Ctrl+C 取消它。如果我之后查看日志,我不会收到任何错误,看起来就像我在运行中中止了测试。我也尝试在 Taurus 中运行我的测试计划,但这也会冻结,如果我之后查看日志,则没有错误。

我已经完成了本指南中列出的大部分内容9 JMeter 负载测试“内存不足”失败的简单解决方案,但无论如何只是为了澄清一些事情:

  • 我不在 GUI 中运行我的测试。
  • 我在测试计划中没有听众。
  • 我已将 Java 堆大小增加到 28 GB。
  • 我获取嵌入式资源,但仅从域内获取。
  • 托管网页的环境应该能够轻松处理 150 多个用户。

我使用的服务器是一个非常弱的虚拟机。当我运行测试并查看“顶部”时,平均负载为 20-30,考虑到服务器有 4 个内核,这显然太高了。但是当我在网上查看时,似乎人们很容易在普通笔记本电脑上运行 3-500 个并发用户的测试,所以这就是为什么我仍然怀疑还有其他错误。

服务器规格:

  • 运行 Oracle Linux Server 7.5 的虚拟机
  • 4 核 Intel Xeon E5-2650 v3 @ 2.3 GHz
  • 32 GB 内存

有什么明显的我遗漏或者我的服务器太弱了吗?

提前致谢!此致

4

1 回答 1

1
  1. 您的堆设置可能对您的设置来说太高了,您应该能够使用几 GB 的堆模拟 150 个并发用户,而不会出现任何问题。因此,您的操作系统可能会进行大量交换,从而导致高磁盘 IO。

  2. 另一个原因是 JMeter 在发送下一个请求之前等待响应,如果您没有合理的超时并且服务器无法响应 - 您的测试将永远不会结束。所以考虑引入连接和响应超时,最好的方法是使用HTTP Request Defaults,这样你可以在一个地方设置超时,它们将被传播到所有HTTP 请求采样器

    在此处输入图像描述

  3. 考虑设置对服务器的监控,因为它可能只是缺少 CPU 或 RAM,因此不会响应。您可以为此使用JMeter PerfMon PluginSSHMon Samples Collector

  4. 检查您的应用程序在测试基础设施和中间件组件(应用程序/Web 服务器、数据库、负载平衡器、反向代理等)。这些家伙需要针对高负载进行调整,因为他们的默认配置有利于开发/调试,但不适用于负载测试/生产。

  5. 考虑使用附加到应用程序的分析器工具APM 工具重新运行测试- 这样您将能够判断瓶颈是什么,即哪个组件减慢了整个系统的速度。

于 2018-11-27T13:01:25.990 回答