我的服务器是否太弱,无法 运行 一个简单的 JMeter 测试计划,并发 150 个用户?
Is my server too weak to run a simple JMeter test plan with 150 concurrent users?
我正在尝试使用 JMeter 创建负载测试。我有一个非常简单的测试计划:
- 包含所有标准的 HTTP Cookie 管理器、缓存管理器等
- 包含具有一百万个有效用户名的 CSV 数据集配置。
- 它访问登录页面并提交用户名以获得授权。
- 然后它访问一个页面,该页面执行一些数据库请求并且
显示结果。
我可以 运行 在 80 个并发用户和 30 秒的启动时间内成功完成。如果我超越了,事情就开始变得糟糕起来。大多数时候,测试只是卡住了,我最终不得不使用 Ctrl+C 取消它。如果我之后查看日志,我没有得到任何错误,看起来我在 运行 中途中止了测试。我还尝试 运行 在 Taurus 中设置我的测试计划,但它也冻结了,如果我之后查看日志,则没有错误。
我已经完成了本指南中列出的大部分内容9 Easy Solutions for a JMeter Load Test “Out of Memory” Failure,但无论如何还是要澄清一些事情:
- 我不 运行 在 GUI 中进行测试。
- 我的测试计划中没有听众。
- 我已将 Java 堆大小增加到 28 GB。
- 我获取嵌入式资源,但仅从域内获取。
- 托管网页的环境应该能够轻松处理超过 150 个用户。
我使用的服务器是一个相当弱的虚拟机。当我 运行 测试并查看 "top" 时,平均负载为 20-30,考虑到服务器有 4 个内核,这显然太高了。但是当我在网上查看时,似乎人们很容易 运行 在普通笔记本电脑上对 3-500 个并发用户进行测试,所以这就是为什么我仍然怀疑还有其他错误。
服务器规格:
- 虚拟机运行ning Oracle LinuxServer 7.5
- Intel Xeon E5-2650 v3 的 4 个内核 @ 2.3 GHz
- 32 GB 内存
有什么明显的我遗漏的东西或者我的服务器太弱了吗?`
提前致谢!
最好的问候
您的堆设置对于您的设置来说可能太高了,您应该能够使用几千兆字节的堆模拟 150 个并发用户而不会出现任何问题。因此,您的操作系统可能会出现巨大的 swapping 导致高磁盘 IO 的情况。
另一个原因是 JMeter 在发送下一个请求之前等待响应,如果您没有合理的超时并且服务器无法响应 - 您的测试将永远不会结束。所以考虑引入连接和响应超时,最好的方法是使用 HTTP Request Defaults, this way you can set the timeouts at one place and they will be propagated to all HTTP Request 采样器
考虑设置服务器监控,因为它可能只是缺少 CPU 或 RAM 因此不会响应。您可以为此使用 JMeter PerfMon Plugin or SSHMon Samples Collector
检查您的应用程序测试基础架构和中间件组件(application/web 服务器、数据库、负载平衡器、反向代理等)。这些家伙需要针对高负载进行调整,因为它们的默认配置适用于 development/debugging 但不适用于负载 testing/production。
考虑重新运行您的测试,将 profiler tool or an APM Tool 附加到您的应用程序 - 这样您将能够判断瓶颈是什么,即哪个组件减慢了整个系统宕机。
我正在尝试使用 JMeter 创建负载测试。我有一个非常简单的测试计划:
- 包含所有标准的 HTTP Cookie 管理器、缓存管理器等
- 包含具有一百万个有效用户名的 CSV 数据集配置。
- 它访问登录页面并提交用户名以获得授权。
- 然后它访问一个页面,该页面执行一些数据库请求并且
显示结果。
我可以 运行 在 80 个并发用户和 30 秒的启动时间内成功完成。如果我超越了,事情就开始变得糟糕起来。大多数时候,测试只是卡住了,我最终不得不使用 Ctrl+C 取消它。如果我之后查看日志,我没有得到任何错误,看起来我在 运行 中途中止了测试。我还尝试 运行 在 Taurus 中设置我的测试计划,但它也冻结了,如果我之后查看日志,则没有错误。
我已经完成了本指南中列出的大部分内容9 Easy Solutions for a JMeter Load Test “Out of Memory” Failure,但无论如何还是要澄清一些事情:
- 我不 运行 在 GUI 中进行测试。
- 我的测试计划中没有听众。
- 我已将 Java 堆大小增加到 28 GB。
- 我获取嵌入式资源,但仅从域内获取。
- 托管网页的环境应该能够轻松处理超过 150 个用户。
我使用的服务器是一个相当弱的虚拟机。当我 运行 测试并查看 "top" 时,平均负载为 20-30,考虑到服务器有 4 个内核,这显然太高了。但是当我在网上查看时,似乎人们很容易 运行 在普通笔记本电脑上对 3-500 个并发用户进行测试,所以这就是为什么我仍然怀疑还有其他错误。
服务器规格:
- 虚拟机运行ning Oracle LinuxServer 7.5
- Intel Xeon E5-2650 v3 的 4 个内核 @ 2.3 GHz
- 32 GB 内存
有什么明显的我遗漏的东西或者我的服务器太弱了吗?`
提前致谢! 最好的问候
您的堆设置对于您的设置来说可能太高了,您应该能够使用几千兆字节的堆模拟 150 个并发用户而不会出现任何问题。因此,您的操作系统可能会出现巨大的 swapping 导致高磁盘 IO 的情况。
另一个原因是 JMeter 在发送下一个请求之前等待响应,如果您没有合理的超时并且服务器无法响应 - 您的测试将永远不会结束。所以考虑引入连接和响应超时,最好的方法是使用 HTTP Request Defaults, this way you can set the timeouts at one place and they will be propagated to all HTTP Request 采样器
考虑设置服务器监控,因为它可能只是缺少 CPU 或 RAM 因此不会响应。您可以为此使用 JMeter PerfMon Plugin or SSHMon Samples Collector
检查您的应用程序测试基础架构和中间件组件(application/web 服务器、数据库、负载平衡器、反向代理等)。这些家伙需要针对高负载进行调整,因为它们的默认配置适用于 development/debugging 但不适用于负载 testing/production。
考虑重新运行您的测试,将 profiler tool or an APM Tool 附加到您的应用程序 - 这样您将能够判断瓶颈是什么,即哪个组件减慢了整个系统宕机。