大家好,我是IT修真院北京分院第32期学员,一枚正直善良的程序员,今天给大家分享一下如何用Jmeter对自己的服务器进行有效压测,让服务器效果最优化:
一、Jmeter
Jmeter是一个全部代码由java组成的测试软件,主要用来测试服务器的并发数、响应时间、吞吐量,界面如下:
我们可以自己写一些http请求,也可以使用其他辅助工具来完成脚本的录制,这里推荐一款录制脚本软件Badboy,导出jmx文件放入Jmeter软件中可以直接出现如上图的step1、step2,然后将就可以运行。
既然要进行压力测试那么我们就要明白一些参数的实际意义,
(1)Jmeter的测试参数:
线程数:本机与测试网站建立的连接数,因为还有一个等待时间所以线程数未必是顺发
等待时间:我自己的理解是在X秒之后最后一个线程启动,来画一张图理解一下:
我们可以把这些看成是我们的线程,在没有循环的情况下,一个链接从开始到结束即收到数据之后就会停止,如果我们想保持我们的并发量,就需要设置合理的循环次数和等待时间,使我们的服务器在中间一段时间内可以保持全部线程并发来达到一个合理的测试结果。
循环次数:就是每个线程的循环次数,这里有个坑,如果你使用了badboy录制脚本,step中有个循环次数
我们需要调整这个循环次数而不是最开始图上的循环次数,那个循环次数对step无效。
调度器:方便我们自动化测试脚本,启动时间和持续时间从字面可以理解意思,我在这里没有使用调度器就不妄加评论。
(2)聚合报告的参数:
samples:这个该是请求次数
average、median:平均时间和中间时间
90%line、95%line、99%line:先明确一下xx%line的含义,即百分位,如果100个请求按时间升序排列,我是第90个,那么我请求的时间就是90%,翻译过来就是有90%的数据花费的时间比我的少,这个指标代表了高并发情况下大部分用户的体验值
min、max:最短耗时和最长耗时 也就是第一位和第一百位,以上时间均以毫秒位单位
error:状态码不为200的请求(错误请求),原因有很多,可以具体查看。
throughput:吞吐量,每秒钟处理请求的次数
recieved kb/s:获得的数据量
比较重要的是90%line、error、throughput,我们在做压力测试的时候要根据服务器和网页的实际情况,不只根据数据还要根据服务器的性能来做出各种调整,需要注意的是不是tps越高越好,也不是90%线越快越好,因为这无法代表你服务器的最佳状态,参数需要多次调式之后才能获得正确聚合报告。
(3)Jmeter的插件
Jmeter自带的一些图像可能无法满足我们的需求,这里可以使用Jmeter的插件,Jmeter Plugins下载一些方便我们测试的插件,如下图:
在此测试中我主要使用的是聚合报告、jp@gc - Transactions per Second和结果树三个报告。
二、实际测试
下面是我要测试的三个页面:
主页:主页包含大量的静态文件,极少的和数据库交互的动态数据,只有4个随机选取展示学生会比较浪费时间。
学生列表页面,此页面无静态资源、直接从数据库拿出一个100数据的大list。
学生查询页面,此页面只有一组数据,memcached进行的是key-string缓存、redis进行的是key-map缓存。
(1