JMeter是Apache组织开发的基于Java的压力测试工具,能够对HTTP和FTP服务器进行压力和性能测试,也可以对任何数据库进行同样的测试(通过JDBC)。

1. 基础设置

  • JMeter的设置很简单,主要是创建线程组,添加监听器、断言判定以及设置HTTP的请求信息:包括默认的请求header数据,cookie、以及请求方法及参数。此处设定的是一个非常简单的RESTful API接口,所以只需要设定一个HTTP请求即可。
  • 这里我们设定的现成数为100,表示有100个用户,Ramp-Up Period我们设置为0,表示为并发进行请求。一般情况下这里的循环次数我们最好是多设置几次,因为压力测试的时候要保证测试的响应时间曲线稳定住一定时间后,才认为是当前被测试服务器的真实性能,所以刚开始测试的时候需要一定预热时间,一般测试到一定时间之后曲线会稳定住,这时候再判断当前的响应时间才比较准确。

2. 测试结果相关说明


JMeter可以生成好几种结果报告形式,其中最常用的就是这个聚合报告,关于这个报告的参数说明我们大概都能猜到,主要就是请求的相应时间,错误率,吞吐量这些指标。

  • Label:说明是请求类型,如Http,FTP等请求。
  • Samples:也就是图形报表中的样本数目,总共发送到服务器的样本数目。
  • Average:也就是图形报表中的平均值,是总运行时间除以发送到服务器的请求数。
  • Median:也就是图形报表中的中间值,是代表时间的数字,有一半的服务器响应时间低于该值而另一半高于该值。
  • 90%line:是指90%请求的响应时间比所得数值还要小。
  • Min:是代表时间的数字,是服务器响应的最短时间。
  • Max: 是代表时间的数字,是服务器响应的最长时间。
  • Error%:请求的错误百分比。
  • Throughput:也就是图形报表中的吞吐量,这里是服务器每单位时间处理的请求数,注意查看是秒或是分钟。
  • KB/sec:是每秒钟请求的字节数。

3. 并发及吞吐量相关说明

  • 通过测试的结果我们可以快速看出接口的一个大概性能情况,我们可以根据设定的请求时间来进行性能判定:比如请求时间超过3000ms都是坏链。这样我们就能大体计算出改台服务器的一个大概范围的吞吐量以及并发量。

  • 每秒处理请求数和并发不是一个概念,但它们之间有联系: 设平均响应时间为t(单位为毫秒), 并发量为c,每秒处理请求数为q,则: q = (1000/t) * c

4.关于高并发的优化

  • 数据库,这是web项目中最常见的瓶颈,解决方法一般都是通过cache或者可以考虑数据库的主从分离加速
  • 远程接口调用,解决方法是选择高性能的RPC框架,使用长连接代替短连接
  • 容器,容器本身的并发量是有上限的,所以大型系统都是分布式的
  • 业务逻辑,复杂的业务逻辑肯定会花费更多的时间去处理,可以采用异步或多线程的方式解决
  • 其他,如JVM调优,网络带宽,CDN加速,增加服务器CPU,负载均衡等等很多其他方式

–EOF–