【压力测试1】JMeter压力测试、Linux中CPU占用率分析

【压⼒测试1】JMeter压⼒测试、Linux中CPU占⽤率分析
⼀、下载安装及使⽤
下载地址:
安装:下载后⽂件为格式,将其放⼊jmeter安装⽬录下的lib/ext⽬录,然后重启jmeter,即可。
启动jemter,点击选项,最下⾯的⼀栏,如下图所⽰:
打开后界⾯如下:
Installed Plugins(已安装的插件):即插件jar包中已经包含的插件,可以通过选中勾选框,来使⽤这些插件;
Available Plugins(可下载的插件):即该插件扩展的⼀些插件,可以通过选中勾选框,来下载你所需要的插件;
Upgrades(可更新的插件):即可以更新到最新版本的⼀些插件,⼀般显⽰为加粗斜体,可以通过点击截图右下⾓的Apply Changes and Restart Jmeter按钮来下载更新;
PS:⼀般不建议进⾏更新操作,因为最新的插件都有⼀些兼容问题,⽽且很可能导致jmeter⽆法使⽤(经常报加载类异常)
氮化铬铁  建议使⽤jmeter最新的3.2版本来尝试更新这些插件。
⼆、Transactions per Second
即TPS:每秒事务数,性能测试中,最重要的2个指标之⼀。该插件的作⽤是在测试脚本执⾏过程中,监控查看服务器的TPS表现————⽐如整体趋势、实时平均值⾛向、稳定性等。
jmeter本⾝的安装包中,监视器虽然提供了⽐如这种元件,也能提供⼀些实时的数据,但相⽐于要求更⾼的性能测试需求,就稍显乏⼒。
某次压⼒测试TPS变化展⽰图:
三、Response Times Over Time
即TRT:事务响应时间,性能测试中,最重要的两个指标的另外⼀个。该插件的主要作⽤是在测试脚本执⾏过程中,监控查看响应时间的实时平均值、整体响应时间⾛向等。
使⽤⽅法如上,下载安装配置好插件之后,重启jmeter,添加该监视器,即可实时看到实时的TRT数值及整体表现。
第n个空间
某次压⼒测试TRT变化展⽰图:
四、PerfMon Metrics Collector
即服务器性能监控数据采集器。在性能测试过程中,除了监控TPS和TRT,还需要监控服务器的资源使⽤情况,⽐如CPU、memory、I/O 等。该插件可以在性能测试中实时监控服务器的各项资源使⽤。
下载界⾯如下:
其中JMeterPlugins-Standard和JMeterPlugins-Extras是客户端的插件,ServerAgent是服务端的插件。
下载成功后,复制JmeterPlugins-Extras.jar和JmeterPlugins-Standard.jar两个⽂件,放到jmeter安装⽂件中的lib/ext中,重启jmeter,即可看到该监视器插件。
将ServerAgent-2.2.1.jar上传到被测服务器,解压,进⼊⽬录,Windows环境,双击ServerAgent.bat启动;linux环境执ServerAgent.sh启动,默认使⽤4444端⼝。
如出现如下图所⽰情况,即表明服务端配置成功:
1、服务端启动校验
CMD进⼊命令框,观察是否有接收到消息,如果有,即表明ServerAgent成功启动。
2、客户端监听测试
给测试脚本中添加jp@gc - PerfMon Metrics Collector,然后添加需要监控的服务器资源选项,启动脚本,即可在该界⾯看到资源使⽤的曲线变化。如下图所⽰:
在脚本启动后,即可从界⾯看到服务器资源使⽤的曲线变化,Chart表⽰主界⾯显⽰,Rows表⽰⼩界⾯以及不同资源曲线所代表的颜
⾊,Settings表⽰设置,可选择⾃⼰需要的配置。
PS:注意测试脚本需要持续运⾏⼀段时间,才可以看到具体的曲线变化,否则ServerAgent端会断开
连接!
五、线程组
1、线程数:表⽰启动的线程数,也就是并发的数量。
2、Ramp-Up Period:表⽰1秒内启动1个线程,默认为0,表⽰程序启动后,⽴即开启1个线程,设置太⼤或太⼩都不是很好,设置的最佳值,Ramp-Up Period = 线程数/吞吐量。
3、循环次数:表⽰每个线程要发送多少次请求。
4、调度器:顾名思义,持续时间如果设置为60,表⽰持续1分钟,通常循环次数和调度器设置⼀个即可。
六、添加HTTP请求
⼀个HTTP请求有着许多的配置参数,下⾯将详细介绍:上海港区导航
1、名称:本属性⽤于标识⼀个取样器,建议使⽤⼀个有意义的名称。
2、注释:对于测试没有任何作⽤,仅⽤户记录⽤户可读的注释信息。
3、服务器名称或IP :HTTP请求发送的⽬标服务器名称或IP地址。
4、端⼝号:⽬标服务器的端⼝号,默认值为80 。
5、协议:向⽬标服务器发送HTTP请求时的协议,可以是http或者是https ,默认值为http 。
野战光缆6、⽅法:发送HTTP请求的⽅法,可⽤⽅法包括GET、POST、HEAD、PUT、OPTIONS、TRACE、DELETE等。
7、Content encoding :内容的编码⽅式,默认值为iso8859
8、路径:⽬标URL路径(不包括服务器地址和端⼝)
9、⾃动重定向:如果选中该选项,当发送HTTP请求后得到的响应是302/301时,JMeter ⾃动重定向到新的页⾯。
10、Use keep Alive :当该选项被选中时,jmeter 和⽬标服务器之间使⽤ Keep-Alive⽅式进⾏HTTP通信,默认选中。
11、Use multipart/from-data for HTTP POST :当发送HTTP POST 请求时,使⽤Use multipart/from-data⽅法发送,默认不选中。
12、同请求⼀起发送参数:在请求中发送URL参数,对于带参数的URL ,jmeter提供了⼀个简单的对参数化的⽅法。⽤户可以将URL中所有参数设置在本表中,表中的每⼀⾏是⼀个参数值对(对应RUL中的名称1=值1)。
13、同请求⼀起发送⽂件:在请求中发送⽂件,通常,HTTP⽂件上传⾏为可以通过这种⽅式模拟。/14、从HTML⽂件获取所有有内含的资源:当该选项被选中时,jmeter在发出HTTP请求并获得响应的HTML⽂件内容后,还对该HTML进⾏Parse 并获取HTML中包含的所有资源(图⽚、flash等),默认不选中,如果⽤户只希望获取页⾯中的特定资源,可以在下⽅的Embedded URLs must match ⽂本框中填⼊需要下载的特定资源表达式,这样,只有能匹配指定正则表达式的URL指向资源会被下载。
15、⽤作监视器:此取样器被当成监视器,在Monitor Results Listener 中可以直接看到基于该取样器的图形化统计信息。默认为不选中。
16、Save response as MD5 hash:选中该项,在执⾏时仅记录服务端响应数据的MD5值,⽽不记录完整的响应数据。在需要进⾏数据量⾮常⼤的测试时,建议选中该项以减少取样器记录响应数据的开销。
七、系统吞吐量 QPS(TPS)
系统吞吐量 = 每秒处理的事务数
QPS(TPS)= 并发数/平均响应时间
药品采集⼀个系统吞吐量通常由QPS(TPS)、并发数两个因素决定,每套系统这两个值都有⼀个相对极限值,在应⽤场景访问压⼒下,只要某⼀项达到系统最⾼值,系统的吞吐量就上不去了,如果压⼒继续增⼤,系统的吞吐量反⽽会下降,原因是系统超负荷⼯作,上下⽂切换、内存等
等其它消耗导致系统性能下降。
⼋、聚合报告
多功能鼠标我认为聚合报告应该是JMeter压⼒测试软件中最重要的报告。
1. #Samples:样本数,如果你看过上⼀篇,这个就是前⾯我们那个公式算出来的结果
(Loop Count(Loop Controler)*Number of Threads*Loop Count(group))
2. Average:平均响应时间。
3. Median:中位数,50%⽤户响应时间。
4. Line:90%⽤户响应时间。
5. Min:最⼩响应时间。
6. Max:最⼤响应时间。
7. Error%:本次测试中出现错误的请求的数量/请求的总数
8. Throughput:吞吐量,表⽰每秒完成的请求数。
9. KB/Sec:每秒从服务器端接收到的数据量(只是接收)。
九、Linux查看程序运⾏情况
1、Top
top命令是Linux下常⽤的性能分析⼯具,能够实时显⽰系统中各个进程的资源占⽤状况,类似于Windows的任务管理器。
top显⽰系统当前的进程和其他状况,是⼀个动态显⽰过程,即可以通过⽤户按键来不断刷新当前状态.如果在前台执⾏该命令,它将独占前台,直到⽤户终⽌该程序为⽌. ⽐较准确的说,top命令提供了实
时的对系统处理器的状态监视.它将显⽰系统中CPU最“敏感”的任务列表.该命令可以按CPU使⽤.内存使⽤和执⾏时间对任务进⾏排序;⽽且该命令的很多特性都可以通过交互式命令或者在个⼈定制⽂件中进⾏设定。
在linux系统中,top命令可谓是分析系统性能最⽅便的⼯具,⽽且top还是个交互式⼯具;通过top命令可以清楚地了解到正在执⾏的进程信息包括进程ID,内存占⽤率,CPU占⽤率等。其实就跟window的任务管理器类似。
2、查看CPU使⽤率
sar -u 1 5
表⽰每1秒采集⼀次,共采集5次。
这个命令可根据实际线程组中的设置,进⾏CPU使⽤率⽅⾯的查看。
[root@sss ~]# sar -u 1 5
Linux 3.10.0-957.10.1.el7.x86_64 (izuf633l0ge76tv5mzalpmz)      04/16/2019      _x86_64_        (1 CPU)
04:56:03 PM    CPU    %user    %nice  %system  %iowait    %steal    %idle
04:56:04 PM    all      0.00      0.00      0.00      0.00      0.00    100.00
04:56:05 PM    all      0.00      0.00      0.00      0.00      0.00    100.00
04:56:06 PM    all      0.99      0.00      0.99      0.00      0.00    98.02
04:56:07 PM    all      0.00      0.00      0.00      0.00      0.00    100.00
04:56:08 PM    all      0.00      0.00      0.00      0.00      0.00    100.00
Average:        all      0.20      0.00      0.20      0.00      0.00    99.60
3、查看内存占⽤情况
free -m
1352/1838即为内存占⽤。
⼗、Linux如何统计进程的CPU利⽤率
Linux的/proc⽂件系统,可以看到⾃启动时候开始,所有CPU消耗的时间⽚;对于个进程,也可以看到进程消耗的时间⽚。这是⼀个累计
值,可以"⾮阻塞"的输出。获得⼀定时间间隔的两次统计就可以计算出这段时间内的进程CPU利⽤率。
所以,是否存在⼀种简单的,⾮阻塞的⽅式获得进程的CPU利⽤率? 答案是:“没有”。这⾥给出⼀个很恰当的⽐喻:"这就像有⼈给你⼀张照⽚,要你回答照⽚中车⼦的速度⼀样"。
1、/proc/stat 统计总CPU消耗
计算CPU总消耗可以使⽤如下shell命令:
cat /proc/stat|grep "cpu "|awk '{for(i=2;i<=NF;i++)j+=$i;print "cpu_total_slice " j;}'
cpu_total_slice 19208187744
2、进程消耗的CPU时间⽚
在proc⽂件系统中,可以通过/proc/[pid]/stat获得进程消耗的时间⽚,输出的第14、15、16、17列分别对应进程⽤户态CPU消耗、内核态的消耗、⽤户态等待⼦进程的消耗、内核态等待⼦进程的消耗(man proc)。所以进程的CPU消耗可以使⽤如下命令:
cat /proc/9583/stat|awk '{print "cpu_process_total_slice " 14+15+16+17}'
cpu_process_total_slice 1068099
3、"⾮阻塞"的计算进程CPU利⽤率
从这⾥也看到,是没有某个时刻CPU利⽤率的说法的,也就没法获得某个时刻的CPU利⽤率。这就像物理中的"速度"的概念,没有某⼀时刻速度的概念,速度⼀定是⼀个时间段之内的。那么要"⾮阻塞"计算某个进程CPU利⽤率,则需要取两次事件间隔进⾏计算,这两次事件间隔的操作可以是⾮阻塞的。计算办法如下:
时刻A,计算操作系统总CPU时间⽚消耗total_cpu_slice_A;计算进程总CPU时间⽚消耗;total_process_slice_A ;
时刻B,计算操作系统总CPU时间⽚消耗total_cpu_slice_B;计算进程总CPU时间⽚消耗;total_process_slice_B。
B时刻就可以"⾮阻塞"的计算这段时间进程的CPU利⽤率了:
100%*(total_process_slice_B-total_process_slice_A)/(total_cpu_slice_B-total_cpu_slice_A)
⼗⼀、JMeter使⽤过程中常见的问题
1、Response Times Over Time中的峰值和聚合报告中的最⼤值为何不⼀致?
因为Response Times Over Time中的点是⼀个时间的概念,表⽰的是⼀段时间内的请求的平均响应时间,⽽聚合报告中的最⼤值表⽰的是⼀个请求的最⼤响应时间,因此Response Times Over Time的峰值和聚合报告中的最⼤值不⼀致。
2、Response Times Over Time图中有多少个点,和请求数有什么关系?
Response Times Over Time中的点是⼀个时间的概念,在setting中可以设置,每隔500ms记录⼀个点,这个点就表⽰这段时间内的请求的平均响应时间。
⼗⼆、CPU使⽤率与CPU空闲时间的关系?
多任务操作对CPU都是分时间⽚使⽤的,⽐如A进程占⽤10ms,B进程占⽤30ms,然后空闲60ms,再⼜是A进程占⽤10ms,B进程占⽤30ms,空闲60ms;如果⼀段时间内都是如此,那么这段时间内的CPU占⽤率就是40%。
CPU对线程的响应并不是连续的,通常会在⼀段时间后⾃动中断线程。未响应的线程增加,就会不断加⼤CPU的占⽤。
往期精彩内容:
参考:
Loading [MathJax]/jax/output/HTML-CSS/jax.js

本文发布于:2024-09-22 20:34:56,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/2/223702.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:时间   响应   进程
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议