大型网站压力测试及优化方案


目录

  • 木桶理论应用在系统优化中
  • 压力测试如何实施
  • 常用压力测试工具选型
  • 如何监控系统资源,定位性能瓶颈
  • 针对测试报告进行针对性优化
  • 使用JMeter进行压力测试实践
    http://jmeter.apache.org/download_jmeter.cgi,下载apache-jmeter-3.1.tgz。 下载完毕后解压,得到安装包,进入到进入解压目录/bin/,单击jmeter图案,即可启动JMeter。 

2.基本组件简介

应用JMeter需要熟悉一些基本的概念,这是编辑测试计划的界面:     (1)Threads 线程组 这个组件主要用来控制Jmeter并发时产生线程的数量,在它的下一级菜单下只有一个组件(线程组),可以这么理解每个线程就是一个虚拟的用户。所有的其他类型组件必须是(线程组)节点的子节点。   (2)ConfigElement 配置单元 和Sample组件一起工作,主要用来配置Sample如何来发起请求访问服务器,这个东西的主要特点是可以把一些Sample的共同配置放在一个元素里面方便管理,配置单元是有作用域的。作用域和树的那个关系一样越是上级节点的作用域越大,越是接近叶子节点的 作用域就越小,可以复写上级作用域的配置。   (3)Timer 定时器 这个主要是用来调节(线程组),控制线程每次运行测试逻辑(比如说:发出请求)的时间间隔。当然这个下面还有很多类型的定时器,他们主要功能就是调节时间间隔,但个个组件之间的策略有很大不同。   (4)Pre Processors 前置处理器 / Post Processors 后置处理器 类似一个HOOK,在测试执行之前和执行之后执行一些脚本的逻辑。该组件我还没有具体使用过,但大致功能就是这样,非重点组件。   (5)Assert 断言 是指对于Sample完成了请求发送之后,判断一下返回的结果是否满足期望。   (6)Listener 监听器 这个组件不同于平时在Web编程的那种监听器,他是伴随着Jemeter测试的运行而从中抓取运行期间的数据的一个组件,经常使用的是聚合报告组件,从里面可以统计到测试的TPS,响应时间等关键测试数据。

3.进行第一个测试

(1)设置线程组参数 首先在TestPlan下面添加一个ThreadGroup组件,设置线程组组件各项参数。     线程数:最大测试时使用的线程数。 Ramp-Up Period : Jmeter达到指定最大线程数的时间。 循环次数 : 如果是Forever,线程组中的线程将不间断的连续测试系统,当然也可以设置每个线程测试的次数,当完成了规定次数后,该线程将自动退出线程组。   (2)添加Sampler信息 保存线程组后,接着在线程组下面添加Sample组件,我们添加一个HTTP Request组件, 设置属性如下图:   Sampler表示客户端发送某种格式或者规范的请求到服务端,所以有各种各样的Sampler,如FTP/JDBC等。 这里我添加了一个针对百度百科首页的访问请求,端口为80,使用http协议。   (3)添加聚合报告的监听器组件 添加一个Aggregate Report的listener的监听器组件。 Aggregate Report 是 JMeter 常用的一个 Listener,中文被翻译为“聚合报告”。   (4)启动运行 点击RUN运行测试即可。然后可以看到本次测试的Aggregate Report。  

4.Jmeter中的几个重要测试指标释义

可以看到,上面的聚合报告中有很多维度的信息,简单介绍几个比较重要的指标。  
Label 每个 JMeter 的 element(例如 HTTP Request)都有一个 Name 属性,这里显示的就是 Name 属性的值
#Samples 表示你这次测试中一共发出了多少个请求,如果模拟10个用户,每个用户迭代10次,那么这里显示100
Average 平均响应时间——默认情况下是单个 Request 的平均响应时间,当使用了 Transaction Controller 时,也可以以Transaction 为单位显示平均响应时间
Median 中位数,也就是 50% 用户的响应时间
90% Line 90% 用户的响应时间,其他的几个可以类推
Min 最小响应时间
Max 最大响应时间
Error% 本次测试中出现错误的请求的数量/请求的总数
Throughput 吞吐量——默认情况下表示每秒完成的请求数(Request per Second)
Received / Sent KB/Sec 每秒从服务器端接收到/发送的数据量