3

我正在尝试对我的 Spring RESTful Web 服务进行压力测试。

我在 Intel Core 2 Duo 笔记本电脑上运行我的 Tomcat 服务器,内存为 4 GB。我知道它不是真正的服务器机器,但我只有这个,它只是为了学习目的。

对于测试,我在远程机器上运行 JMeter,并通过带有中央无线路由器的私有 WLAN 进行通信。我更喜欢通过无线连接来测试它,因为它可以从移动客户端访问。使用 JMeter,我运行一组 50 个线程,每秒启动一个线程,然后在 50 秒后所有线程都运行。每个线程向服务器重复发送一个 HTTP 请求,其中包含一个要处理的小 JSON 对象,并且在每次迭代中休眠的时间等于 100 毫秒的恒定延迟和具有标准偏差的高斯分布的随机值之和100 毫秒。我为图表使用了一些 JMeter 插件。

结果如下: 在此处输入图像描述

我不知道为什么 mi hits per second 没有超过 100 的阈值(在图中它们每 10 倍),因为使用这种配置它应该高于这个值(50 线程发送至少 3 次会产生 150 次命中/秒)。我没有从服务器收到任何错误消息,一切似乎都运行良好。我尝试了越来越多的配置,但我无法获得超过 100 次命中/秒。为什么?

[编辑] 很多时候,我注意到从某个时间点开始性能大幅下降而没有任何明显的原因:客户端上没有错误响应消息,只有好的 http 响应消息,而且一切似乎在服务器上也运行良好,但查看报告:

在此处输入图像描述

正如您所注意到的,在 01:54 和 02:14 之间发生了一些事情:每秒点击次数减少,响应时间增加,这可能是服务器过载,但是 cpu 减少了怎么办?这与拥塞假设不相容。

4

1 回答 1

1

我想注意到您已经很好地选择了要在 Composite Graph 上显示的行。得出一些结论就足够了:

  1. 请注意,每秒点击次数与 CPU 使用率完全相关。这意味着您有“CPU-bound”系统,最大性能主要受 CPU 限制。记住这一点非常重要:Hits 花费的服务器资源,而不是活跃用户。您可以完全禁用睡眠定时器,但仍会收到相同的 80-90 Hits/s。
  2. CPU 的最高水平在 80% 左右,所以我假设您在计算机上运行 Windows 操作系统(Win7?)。我曾经看到在 Windows 机器上实现 100% 的 CPU 利用率是不可能的,它只是不允许花费最后的 20%。如果您达到了最大值,那么您会看到安装的容量限制。它只是没有足够的 CPU 资源来处理更多请求。为了解决这个瓶颈,您应该提供更多 CPU(使用具有更高级别 CPU 硬件的另一台服务器),或者将操作系统配置为让您使用高达 100%(我不知道它是否适用),或者优化您的系统(代码, 操作系统设置)花费更少的 CPU 来服务单个请求。
  3. 对于第二张图,我假设通过路由器下载了一些东西,或者 JMeter 机器上发生了一些事情。“某事发生”意味着某项任务正在运行。这可能是您的朋友只想做一些“grep error.log”,或者一些计划任务正在运行。要确定这一点,您应该查看降级情况下的路由器资源和 jmeter 机器资源。一定有进程吞噬CPU/DISK/Network。
于 2013-03-06T17:47:35.720 回答