【性能测试】Apache_Jmeter,并发/压力/负载/稳定性/可靠性测试,常见名词和基础性能分析解析。

【常见名词】

QPS(TPS):每秒钟request/事务 数量

 并发数: 系统同时处理的request/事务数

 响应时间:  一般取平均响应时间

(很多人经常会把并发数和TPS理解混淆)

理解了上面三个要素的意义之后,就能推算出它们之间的关系:

QPS(TPS)= 并发数/平均响应时间(包括usetime+think time)

用户数评估:

1.并发用户数=tps*(runtime+thinktime)

2.在线活动用户数,和在线峰值用户数

3.根据经验,总注册人数的20%左右。

【性能分析】

top、sar、dstat、mpstat、vmstat、ps、free、

CPU:vmstat、sar -u 、dstat、mpstat -P ALL、ps;vmstat的r、sar -q的runq-sz、dstat-p的run。

内存:free、vmstat、sar -r、ps;vmstat、sar -W、dmesg | grep killed

网络:sar -n DEV、inconfig RX/TX、cat /proc/net/dev、incstat的util;inconfig dropped、netstat -s 的“segments retransmited”计数、sar -n EDEV rxdrop txdrop 有计数;inconfig的error、netstat -i的RX-ERR和TX-ERR、sar -n EDEV的“rxerr/s""txerr/s”、ip -s link的errors

IO:iostat -XZ、sar -d、iotop、cat /proc/pid/sched | grep iowait;iostat -xnz 1、iostat wait、dmesg、smartctl /dev/sda.

1.用户感知的响应时间=服务器响应时间+网络时间

响应过程-服务器时间:用户发送请求-服务器收到请求-服务器和DB数据库,文件系统的数据交互处理-服务器返回数据-界面展示数据

网络时间:服务供应商的差异-网络延迟-网络拥堵阻塞

定位问题:应用程序、操作系统、服务器设备、网络环节、系统资源等多方面综合排查。

虚拟内存(SWAP交换区):在系统设计时,当系统的物理内存不够新程序使用的时候,就需要将长时间未操作的程序的物理内存释放到虚拟内存做备用,把物理内存供新程序使用。等被占用内存的程序被激活使用后,又从虚拟内存中恢复已保存的数据到物理内存中。

工具排查:

1.整体系统CUP利用率:CPU的执行速度与性能好坏存在决定性作用。期望cpu平均可用率一般不低于20%。

了解处理器型号、处理器的逻辑、主频率、cache大小、是否支持超线程技术。检测流程:若程序导致cop处于满负载状态下,通过系统监控分析工具,检查相关系统日志、web服务器应用日志、DB数据库日志等。结合一些辅助命令如top、free、uptime、sar等辅助分析cpu为何被完全占用,然后根据原因寻找优化方案。

日志举例:如8%id,表示cpu可用闲置率只剩下8%,排序查看占用最大的几个程序,根据程序的监控工具分析,是否需要考虑做负载均衡或者加强机器性能。

监控工具举例:

java超载,则用jvm自带的命令工具(jstat、jmap、jvisualvm、jconsole)等来分析。

mysql超载,可以用数据库监控工具(spotlight、monyog、或者命令行工具)来分析。

2.内存利用率:内存大小是影响性能的核心指标,当内存太小,容易引起系统进程阻塞,应用会非常缓慢,甚至失去响应,严重会导OOM(内存溢出)从而引起进程被系统杀死,最严重会导致重启。但是内存太大,闲置太多,也会引起浪费资源,老式32位处理器的操作系统,由于寻址范围有限,会导致系统无法使用那么“大“的内存,所以大部分服务器都是64位,RAM内存128G或者更大的内存。

linux命令:top查看cpu可用率;free查看内存使用状态;vmstat 2 每两秒采集一次服务器总数据。

free状态内存解释:used已使用物理内存总量;free空闲内存总量;buffers用作内核缓存的内存量;cached缓冲的交换区总量;swaptotal交换区总量;swap used 已使用的交换区总量;swap free 空闲交换区总量。

3.磁盘I/O的利用率和延迟:访问离不开系统的磁盘数据的读写,I/O读写的性能也会直接影响到系统程序的性能,和CPU处理频率的物理操作比较,磁盘I/O是系统中最慢的一部分,好比分钟和毫秒的比较。针对I/O的场景模型,我们要考虑的有IO的TPS(每秒请求的事务数)、平均IO数据、平均队列长度、平均服务时间、IO利用率(磁盘Busy time%)等指标。

4.网络利用率:网络带宽、响应时间、网络延迟、阻塞等都是影响系统性能的因素。假设网络不稳定、不安全,会导致应用程序丢失、超市、阻塞、波动率大灯异常。我们需要完善网络配置,考虑因素有网络是否可达、防火墙是否开启、端口的访问、带宽是否被限制、路由的寻址、网络的延时等。

5.总进程数据分析:vmstat 2 1,每两秒采集一次数据,一共采集1次,去掉1就一直采集直到关闭。

【vmstat 2 命令】表示:每2秒采集一次总进程的数据(和top展示单个线程数据不同),包括服务器的CPU使用率,内存使用,虚拟内存交换情况,IO读写情况

r 表示运行队列(就是说多少个进程真的分配到CPU),我测试的服务器目前CPU比较空闲,没什么程序在跑,当这个值超过了CPU数目,就会出现CPU瓶颈了。这个也和top的负载有关系,一般负载超过了3就比较高,超过了5就高,超过了10就不正常了,服务器的状态很危险。top的负载类似每秒的运行队列。如果运行队列过大,表示你的CPU很繁忙,一般会造成CPU使用率很高。

b 表示阻塞的进程,这个不多说,进程阻塞,大家懂的。

swpd 虚拟内存已使用的大小,如果大于0,表示你的机器物理内存不足了,如果不是程序内存泄露的原因,那么你该升级内存了或者把耗内存的任务迁移到其他机器。

free   空闲的物理内存的大小,我的机器内存总共8G,剩余3415M。

buff   Linux/Unix系统是用来存储,目录里面有什么内容,权限等的缓存,我本机大概占用300多M

cache cache直接用来记忆我们打开的文件,给文件做缓冲,我本机大概占用300多M(这里是Linux/Unix的聪明之处,把空闲的物理内存的一部分拿来做文件和目录的缓存,是为了提高 程序执行的性能,当程序使用内存时,buffer/cached会很快地被使用。)

si  每秒从磁盘读入虚拟内存的大小,如果这个值大于0,表示物理内存不够用或者内存泄露了,要查找耗内存进程解决掉。我的机器内存充裕,一切正常。

so  每秒虚拟内存写入磁盘的大小,如果这个值大于0,同上。

bi  块设备每秒接收的块数量,这里的块设备是指系统上所有的磁盘和其他块设备,默认块大小是1024byte,我本机上没什么IO操作,所以一直是0,但是我曾在处理拷贝大量数据(2-3T)的机器上看过可以达到140000/s,磁盘写入速度差不多140M每秒

bo 块设备每秒发送的块数量,例如我们读取文件,bo就要大于0。bi和bo一般都要接近0,不然就是IO过于频繁,需要调整。

in 每秒CPU的中断次数,包括时间中断

cs 每秒上下文切换次数,例如我们调用系统函数,就要进行上下文切换,线程的切换,也要进程上下文切换,这个值要越小越好,太大了,要考虑调低线程或者进程的数目,例如在apache和nginx这种web服务器中,我们一般做性能测试时会进行几千并发甚至几万并发的测试,选择web服务器的进程可以由进程或者线程的峰值一直下调,压测,直到cs到一个比较小的值,这个进程和线程数就是比较合适的值了。系统调用也是,每次调用系统函数,我们的代码就会进入内核空间,导致上下文切换,这个是很耗资源,也要尽量避免频繁调用系统函数。上下文切换次数过多表示你的CPU大部分浪费在上下文切换,导致CPU干正经事的时间少了,CPU没有充分利用,是不可取的。

us 用户CPU时间,我曾经在一个做加密解密很频繁的服务器上,可以看到us接近100,r运行队列达到80(机器在做压力测试,性能表现不佳)。

sy 系统CPU时间,如果太高,表示系统调用时间长,例如是IO操作频繁。

id  空闲 CPU时间,一般来说,id + us + sy = 100,一般我认为id是空闲CPU使用率,us是用户CPU使用率,sy是系统CPU使用率。

wt 等待IO CPU时间。

猜你喜欢

转载自blog.csdn.net/denzeleo/article/details/107000384