0

我正在使用 jmeter 生成性能测试,为了让事情保持简短和直接,我从 json 文件中读取初始数据,我有一个线程组,在读取数据后我随机化某些值以防止数据重复它,然后我使用变量将最终数据传递给端点,这将最终形成一个由端点接收的 json 主体,它基本上会在数据库中生成一个新事务。我还添加了一个恒定计时器,以在请求之间添加 7 秒的延迟,测试持续时间为 10 分钟且没有加速,我计算每秒的请求数如下:

1 分钟有 60 秒,每个请求有 7 秒的延迟,那么可以说每分钟我每分钟发送大约 8.5 个请求,这是我的计算 (60/7) = 8.5,如果测试持续10 分钟,然后我乘以 (8.5*10) = 85,在 10 分钟内给我总共 85 个事务,所以我应该能够在测试完成后看到在数据库中创建的完全相同数量的事务。

当我运行 10-20-40 个用户时这是真的,在负载测试运行后我查询数据库并且我得到完全相同数量的事务但是,随着我增加线程组中的用户,这不再发生,例如,如果我设置 1000 个用户,我应该能够在 10 分钟内生成 8500 个事务,但事实并非如此,数据库仅创建大约 5.1k 个事务。

发生了什么事,出了什么问题?为什么它最初按预期工作,而当我增加用户时却没有?如果需要,我可以提供更多信息。请帮忙。

4

3 回答 3

0

这可能有两个可能的原因:

  1. 您发现了您的应用程序瓶颈。当您添加更多用户时,应用程序响应时间会增加,因此吞吐量会降低。有一个术语称为饱和点,它代表系统的最大性能,如果超过这个点 - 系统将响应较慢,您将获得比最初更少的 TPS。从被测应用程序方面,您应该查看以下区域:

  2. JMeter 发送请求的速度不够快

于 2019-10-30T09:02:08.280 回答
0

您能否在为 1000 个用户运行 jemter 时检查一次 jmeter 负载生成器的 CPU 和内存利用率(RAM 和 Java 堆利用率)?如果它更高或达到最大值,则可能会影响请求/秒。也只是为了确认来自 Jmeter 方面的请求/秒,您能否在 Jmeter 脚本中添加侦听器以跟踪命中/秒或 TPS?

于 2019-10-30T06:01:33.637 回答
0

如果您的 API 响应时间为 1 秒,并且您为这 1000 个用户提供了足够的启动时间,这也是正确的(10 分钟测试持续时间内 8.5K 请求)。

所以可能的原因是:

  • 您没有为 1000 个用户提供足够的启动时间。
  • 当您为 1000 个用户执行测试时,您的 API 平均响应时间超过 1 秒。

可能的解决方法:

  • 首先,尝试测量 1 个用户的 API 响应时间。
  • 然后相应地计算在 10 分钟内达到 8500 个请求需要多少用户。使用这个公式:

    TPS* 最大响应时间(以秒为单位)

  • 为 1000 个用户提供适当的启动时间。检查此线程以了解您应该如何计算加速时间。

  • 检查您的负载生成器是否能够生成 1000 个用户而没有任何内存或运行状况(即 CPU 使用)问题。如果需要,请尝试使用分布式架构。
于 2019-10-30T08:40:48.010 回答