压测中的CPU指标分析

压测中的CPU指标分析,第1张

压测中三个指标CPU Utilization(CPU利用率)、Load Average(负载平均值)和Context Switch Rate(上下文切换率)

CPU Utilization  好理解,就是CPU的利用率,75%以上就比较高了(也有说法是80%或者更高)。除了这个指标外,还要结合Load Average和Context Switch Rate来看,有可能CPU高是因为后两个指标高导致的。

Load Average  ,这个很难衡量。网上搜了一圈,还没见到几个合理的解释。我100个并发用户测试数来这两个值是:77.534%,6.108,CPU利用率比较高,Load Average也好像有点高。后来发现了如下两片博文:  理解Load Average做好压力测试  ,“Load Average是 CPU的 Load,它所包含的信息不是 CPU的使用率状况,而是在一段时间内 CPU正在处理以及等待 CPU处理的进程数之和的统计信息,也就是 CPU使用队列的长度的统计信息。 ”,基本解释了multi-process,multi-thread程序的原理。 理解Linux处理器的负载均值(翻译)  ,简单说起来就一句话:   Load Average <CPU个数 * 核数 *0.7

比如1个1核CPU,Load Average <1 * 1 * 0.7;1个4核的CPU,Load Average必须 <1 * 4 * 0.7 = 2.8。

查看cpu的信息:grep 'model name' /proc/cpuinfo

Context Switch Rate  。就是Process(Thread)的切换,如果切换过多,会让CPU忙于切换,也会导致影响吞吐量。《 高性能服务器架构  》这篇文章的第2节就是说的是这个问题的。究竟多少算合适?google了一大圈,没有一个确切的解释。Context Switch大体上由两个部分组成:中断和进程(包括线程)切换,一次中断(Interrupt)会引起一次切换,进程(线程)的创建、激活之类的也会引起一次切换。CS的值也和TPS(Transaction Per Second)相关的,假设每次调用会引起N次CS,那么就可以得出

 Context Switch Rate = Interrupt Rate + TPS* N

CSR减掉IR,就是进程/线程的切换,假如主进程收到请求交给线程处理,线程处理完毕归还给主进程,这里就是2次切换。也可以用CSR、IR、TPS的值代入公式中,得出每次事物导致的切换数。因此,要降低CSR,就必须在每个TPS引起的切换上下功夫,只有N这个值降下去,CSR就能降低,理想情况下N=0,但是无论如何如果N >= 4,则要好好检查检查。另外网上说的CSR<5000,我认为标准不该如此单一。

top -d 5 (5秒刷新一个top数据)

top命令的第一行  top - 20:05:30 up 24 days, 10:46, 2 users, load average: 0.04, 0.03, 0.05

显示的内容依次为“系统当前时间 、系统到目前为止已运行的时间、当前登录系统的用户数量、系统负载(任务队列的平均长度)三个值分别为1分钟、5分钟、15分钟前到现在的平均值【这三个一般会小于1,如果持续高于5,请仔细查看那个程序影响系统的运行】

top命令的第二行  Tasks: 153 total, 1 running, 152 sleeping, 0 stopped, 0 zombie

显示的内容依次“所有启动的进程数”、“正在运行的进程数”、“挂起的进程数”、“停止的进程数”、“僵尸进程数”。

top命令的第三行  %Cpu(s): 0.1 us,   0.0 sy,  0.0 ni,  99.8 id,  0.0 wa,  0.0 hi,  0.0 si,  0.1 st

显示的内容依次为“用户空间占用CPU百分比”、“内核空间占用CPU百分比”、“用户空间内改变过优先级的进程占用CPU百分比”、“空闲CPU百分比”、“等待输入输出(IO)CPU时间百分比”、“CPU服务于硬件中断所耗费的时间总额”、“CPU服务软中断所耗费的时间总额”、“Steal Time”

(主要看id空闲CPU百分比)

top命令的第四行   KiB Mem : 16241836 total, 944800 free, 7689124 used, 7607912 buff/cache

显示内容依次为“物理内存总量”、“已使用的物理内存”、“空闲物理内存”、“内核缓存内存量”。

top命令的第五行   KiB Swap: 8257532 total, 8221180 free,36352 used. 7254304 avail Mem

显示内容依次为“交换区总量”、“已使用交互区总量”、“空闲交换区总量”、“缓冲的交换区总量”

PID:进程ID,进程的唯一标识符

USER:进程所有者的实际用户名。

PR:进程的调度优先级。这个字段的一些值是'rt'。这意味这这些进程运行在实时态。

NI:进程的nice值(优先级)。越小的值意味着越高的优先级。负值表示高优先级,正值表示低优先级

VIRT:进程使用的虚拟内存。进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES

RES:驻留内存大小。驻留内存是任务使用的非交换物理内存大小。进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA

SHR:SHR是进程使用的共享内存。共享内存大小,单位kb

S:这个是进程的状态。它有以下不同的值:

D - 不可中断的睡眠态。

R – 运行态

S – 睡眠态

T – 被跟踪或已停止

Z – 僵尸态

%CPU:自从上一次更新时到现在任务所使用的CPU时间百分比。

%MEM:进程使用的可用物理内存百分比。

TIME+:任务启动后到现在所使用的全部CPU时间,精确到百分之一秒。

COMMAND:运行进程所使用的命令。进程名称(命令名/命令行)

Linux性能监控:

http://blog.csdn.net/tianlesoftware/archive/2011/02/21/6198780.aspx

基本查看服务端性能常用命令:

cup各核使用率,内存使用情况: top 按1;

服务端网络带宽查看:sudo iftop -n

1.登录https://jmeter-plugins.org/wiki/PerfMonAgent/下载ServerAgent-2.2.1.zip,解压可以直接运行

2.到https://jmeter-plugins.org/downloads/old/下载JMeterPlugins-Standard-1.4.0.zip和JMeterPlugins-Extras-1.4.0.zip

PS:jmeter的plugin1.4.0的只支持jmeter3.2以下,不包括3.2,

3.然后解压两个zip包,把jar文件拷贝到/lib/ext文件夹下,环境配置就完成了。

接下来实际运行一下:

1.直接运行ServerAgent-2.2.1文件夹下的startAgent.bat,启动监控

2.打开jmeter,新建线程组,设置循环下去的线程

监听器选择jp@gc - PerfMon Metrics Collector和jp@gc - Transactions per Second两个监听器,简单配置一下它们,配置要监听的IP和端口,ServerAgent默认是4444端口,当然你可以修改,比如:./startAgent.sh –udp-port 0 –tcp-port 3450这样。

将程序进行后台运行:

nohup java -jar -Ddubbo.protocol.port=9999 datetool-0.0.1-SNAPSHOT.jar &

网站服务器的压力测试我觉得主要有一些几点。

1.协议这边基本上以http或者https为主了,如果使用其他协议需要分析其打解包的方法。

2.要产生一定的压力,压力源这边一定要有保证。一般都是用机器人来模拟压力,关于机器人的逻辑可以根据具体业务来开发。

3.需要观察在一定压力下,服务器的各项性能指标(cpu,内存,IO,网络流量)进行观察,比如内存是否有泄漏,cpu利用率过高的情况。

4.压力测试应该是一个持续性的过程,在这个过程中需要统计服务器的性能数据,包括tps,以及机器的负载情况等。据此可以分析服务器的瓶颈在何处,后续可以针对优化。

5.目前大部分的服务器都部署在Linux系统上,测试同学还需要掌握相关的Linux命令以便可以更好的测试。

如果你觉得前面的太麻烦,可以来WeTest服务器压力测试高并发,实时性能报表,专家级性能优化建议,目前我们正在做网站压测这一块,你要做的仅仅是填下被测的URL即可,压力源、数据统计这些琐碎的工作交给我们就行了。


欢迎分享,转载请注明来源:夏雨云

原文地址:https://www.xiayuyun.com/zonghe/774312.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-08-21
下一篇2023-08-21

发表评论

登录后才能评论

评论列表(0条)

    保存