了解RESTful Web Service压力测试结果

时间:2013-03-05 22:45:54

标签: spring rest jmeter stress-testing jmeter-plugins

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

我在英特尔酷睿2双核笔记本电脑上运行我的Tomcat服务器,4 GB内存。我知道它不是真正的服务器机器,但我只是这个而且它仅用于学习目的。

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

以下是结果: enter image description here

我无法弄清楚为什么每秒的命中率没有超过100阈值(在图中它们每10乘以一次),因为这个配置它应该高于这个值(至少发送50个线程)三次会产生150次/秒)。我没有从服务器收到任何错误消息,似乎一切都运行良好。我已经尝试了越来越多的配置,但我不能超过100次/秒。 为什么呢?

[编辑]很多时候我注意到在没有任何明显原因的情况下从某个角度出现了实质性的性能下降:客户端没有错误响应消息,只有好的http响应消息,所有这些似乎也在服务器上运行良好,但是看着报告:

enter image description here

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

1 个答案:

答案 0 :(得分:1)

我想注意你已经很好地选择了要在Composite Graph上显示哪些行。这足以得出一些结论:

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