性能测试 操作系统性能分析思路总结

本文涉及的产品
性能测试 PTS,5000VUM额度
简介: 性能测试 操作系统性能分析思路总结

操作系统性能分析思路总结

 

 

 

CPU

1、 整体负载

先查看系统整体负载(可通过w,uptime,top等命令查看),可以查看15分钟前,5分钟前,1分钟前到现在负载均值。

 

通常我们先看15分钟的负载均值,如果负载均值很高,再看5分钟和1分钟的负载,查看是否有下降趋势。如果负载均值等于逻辑CPU(假设每个CPU的核数一样,逻辑CPU=物理CPUX单个CPU的核数),则表示CPU利用率为100%,小于CPU核数,则表示CPU利用率小于100%,大于CPU核数,则要用“就绪状态进程数”来衡量。

 

2、 就绪状态进程数

当负载均值大于逻辑CPU数时,查看处于就绪等待状态的进程数。可通过vmstat命令(r列)查看:如果r的值长期大于系统中的逻辑CPU个数,则表示系统现在运行较慢,有多个进程等待CPU处理。

 

3、 局部占用

系统负载较高的情况下,可进一步查看哪部分占用CPU资源较多(%us, %sy%ni, %id, %wa, %hi(硬中断), %si(软中断)in (中断)cs(上下文切换)),可通过topvmstatiostat命令、nmon工具查看。

 

top命令:可查看%us, %sy%ni, %id, %wa, %hi, %si

 

vmstat命令:可查看%us(参考值:不低于60%, %sy(参考值:不高于15%, %id(参考值:小于u,大于20%, %wa(参考值:不高于30%)incs

 

如果%us的值比较高,说明用户进程消耗的cpu时间较多,如果长期超过50%的使用,那应该考虑优化程序了

 

如果%sy的值过高,说明系统内核消耗的cpu时间较多,是不良表现,要检查原因

 

%id时间(包括I/O等待时间),参考值:小于u,大于20%

 

如果%wa过高,说明I/O等待比较严重,可能是由于磁盘大量随机访问造成,也可能是磁盘的带宽出现瓶颈

 

%cs,每秒上下文的切换次数,在指定时间内,这个值要越小越好,值越大,表明cpu大部分时间浪费在上下文切换,内核消耗的cpu时间过多,导致cpu干“正经事”的时间少了,cpu没有充分利用,要考虑减少线程、线程的数目。举例来说,我们调用系统函数时,代码会进入内核空间,导致上下文切换,线程的切换也是如此;

 

%hi   服务于中断的CPU百分比

 

%si   服务于软中断的CPU百分比

 

in    每秒中断次数

 

iostat命令:

# iostat -c

avg-cpu:  %user   %nice %system %iowait  %steal   %idle

 

avg_cpu  多处理器中,avg_cpu统计的是多个处理器的平均值

 

nmon工具:

SYS_SUMM:

 

说明:

CPU%CPU总体占用情况,User%+Sys%

 

CUP_ALL:可查看%User, %Sys, %Wait

 

4、 单进程

进一步分析,可以查看是哪个进程占用CPU资源较多。可通过toppspidstat命令

ps命令:

ps -aux --sort -pcpu

 

pid命令:

# pidstat -u

 

可查看%usr %system  %guest    %CPU   CPU

5、 单线程

确定占用CPU资源较多的进程后,如果想进一步查看是该进程下哪些线程占用CPU资源较多,进一步分析造成CPU性能瓶颈的代码层问题

操作方法如下:

# top -Hp 13118  #查看PID13118的进程,其所有线程的使用情况

top - 17:32:15 up 5 days,  7:58,  4 users,  load average: 0.00, 0.01, 0.05

Threads:  56 total,   0 running,  56 sleeping,   0 stopped,   0 zombie

%Cpu(s):  0.2 us,  0.1 sy,  0.0 ni, 99.7 id,  0.1 wa,  0.0 hi,  0.0 si,  0.0 st

KiB Mem :   497864 total,    38376 free,   370444 used,    89044 buff/cache

KiB Swap:  2096124 total,  1912088 free,   184036 used.    34656 avail Mem

 

 PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND                                                                                                                                                                                                  

13118 root      20   0 2731268 312056   5036 S  0.0 62.7   0:00.01 java                                                                                                                                                                                                      

13119 root      20   0 2731268 312056   5036 S  0.0 62.7   0:01.04 java                                                                                                                                                                                                      

13120 root      20   0 2731268 312056   5036 S  0.0 62.7   0:22.17 java                                                                                                                                                                                                      

13121 root      20   0 2731268 312056   5036 S  0.0 62.7   0:00.08 java

 

# printf "%x" 13119  #16进制方式展示线程PID13119

333f

 

# jstack 13118 | grep 333f #查看PID13119的线程堆栈信息,对应的代码段

"main" #1 prio=5 os_prio=0 tid=0x00007f1ecc009000 nid=0x333f runnable [0x00007f1ed5b23000]

 

 

6、 单个CPU

必要时,进一步分析每个逻辑CPU的资源占用情况,以便分析是否存在因代码数据结构、算法等不合理导致逻辑CPU使用不均的情况,比如在负载较高的情况下,依旧仅使用某个逻辑cpu

可使用topmpstat命令、nmon工具

 

top命令:开启top命令后,按1

 

mpstat命令:mpstat p -All

 

nmon工具:CPU_SUM表可查看%User, %Sys, %Wait

 

 

内存

1、 整体趋势

先查看内存使用整体走势,大致判断内存使用情况。图波动大且呈上升趋势,有可能是内存泄漏。可通过nmon工具查看(MEM:可查看memfreememtotal

 

2、 内存分布

根据“内存分布”进一步分析内存使用情况,获取更准确的信息。可通过topfreevmstat命令或nmon工具查看。

top命令:可以查看

Mem :  total,   free,   used,   buff/cacheavail Mem

Swap:  total,  free,  used

 

free命令:可以查看

Memtotalusedfreesharedbuff/cache   available

Swap:total, usedfree

 

对于旧版内核来说,Mem: free+buff+cache,可作为应用程序可用内存的大致估算值,Mem: used-buff-cache,可视为应用程序已用内存的大致估算值。

 

对于新版内核来说,available字段展示了可用剩余物理内存。

 

vmstat命令:可以查看

si:每秒从交换分区写入到内存(swap in)的大小,单位kb/s

so:每秒从内存写入到交换分区(swap out)的大小

如果siso的值大于0,代表使用了交换空间,至于是否内存不够,需要结合内核参数vm.swappinessvm.min_free_kbytes limit的参数值来看待

 

swpd:正在使用的交换内存(虚拟内存)大小,单位kb

如果该值大于0,代表使用了交换空间,至于是否内存不够,需要结合内核参数vm.swappinessvm.min_free_kbytes limit的参数值来看待

 

nmon工具:

VM表:pswpin  pswpout,如果这两列的值大于0,代表使用了交换空间,至于是否内存不够,需要结合内核参数vm.swappinessvm.min_free_kbytes limit的参数值来看待

 

 

3、 单进程

进一步分析,查看哪个进程占用内存资源较多,可以通过toppspidstat命令查看

top命令

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

VIRT          进程使用的虚拟内存(Virtual Image)总量,单位kb

RES           进程使用的,未被换出的物理内存大小,单位kb

 

ps命令

# ps -aux --sort -pmem

 

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

VSZ     进程占用的虚拟内存大小    单位:KBkillobytes

RSS     进程占用物理内存大小      单位:KBkillobytes

 

pidstat命令

# pidstat -r

# pidstat -r -p 1739 2 5

3、 更细粒度

例如利用jmap命令查看进程堆栈信息

 

磁盘

1、 整体使用率

查看磁盘(分区)使用率,以确定磁盘繁忙状态。可通过nmon工具查看。

DISKBUSY:

可查看Disk %BusyAvgWavgMax

 

说明:

WAvgAvg更贴近资源消耗的均值

Disk %Busy:磁盘繁忙的百分比,即磁盘能满足的最大IOPS(每秒IO操作数)和当前IO数量的比率。

。一般主要看磁盘的Busy%,当磁盘的Busy%持续大于85%时,即认为磁盘相当繁忙了

 

2、 I/O等待

查看磁盘IO等待情况。可通过iostat命令查看

%util   向设备发起I/O请求的CPU时间百分比,即一秒钟有百分之多少的时间用于I/O请求,参考值:大于95%则表示I/O繁忙

avgqu-sz向设备发起的I/O请求队列的平均队列长度,如果avgqu-sz比较大,也表示有一定量的I/O在等待。

await每次向设备发起的I/O请求平均时间(单位:毫秒),包括请求在请求队列中消耗的时间和服务设备的时间

svctm向设备发起的I/O操作服务时间均值(单位:毫秒),该字段在未来的版本中会被移除

 

1、针对单个机械硬盘,如果%util接近100%,说明产生的I/O请求太多,I/O系统满负荷,该磁盘可能存在瓶颈。而针对SSDRAIDs则并非如此,需要参考avgqu-sz

 

2、如果svctm比较接近await,说明I/O几乎没有时间等待,如果await远大于svctm,说明I/O队列太长,I/O响应太慢,需要进行优化。

 

3、 磁盘IO读写

查看磁盘读写状况,分析磁盘是读占用,还是写占用,I/O,可通过pidstatiostat命令、nmon工具查看

pidstat命令

# pidstat -d

可查看进程级的kB_rd/s  kB_wr/skB_ccwr/s

 

iostat命令

# iostat

可查看kB_read/s    kB_wrtn/s

 

# iostat -kx

可查看r/s     w/s    rkB/s    wkB/s

 

nmon工具

SYS_SUMM表:

Avg tps during an interval:显示采集间隔内磁盘平均I/O次数,该值等于DISK_SUMM表中IO/sec列的平均值。

Max tps during an interval:显示采集间隔内磁盘最大I/O次数,该值等于DISK_SUMM表中IO/sec列的最大值。

Max tps interval time:显示磁盘最大I/O所在时间点。

Total number of Mbytes read:显示采集间隔内磁盘读的总兆字节数,可能是nmonbug,该值并不准确,并且使用LVM划分的虚拟磁盘可能会存在重复统计。

Total number of Mbytes written:显示采集间隔内磁盘写的总兆字节数,该值并不准确,理由同上。

Read/Write Ratio:显示Total number of Mbytes read/ Total number of Mbytes written的值,实时比例。

 

网络

1、 数据收发

检查网卡数据接收和发送情况(是否报错,丢弃等),对网络状况进行基础分析。

可以通过ifconfig命令查看,其输出:

RX表示接收

TX:表示发送

 

2、 整体I/O分析

查看网卡整体I/O以分析是否在“带宽”范围之内

 

3、 网络读写I/O分析

进一步分析是读I/O还是写I/O占用了过多资源

 

备注

如果是性能调优,一些看似无啥规律的数据,比如每秒I/O数,也可通过对比的方式来分析,或者通过绘制的曲线走势来分析(弄清楚曲线变化的原因),可能得到意想不到的结果。

相关实践学习
通过性能测试PTS对云服务器ECS进行规格选择与性能压测
本文为您介绍如何利用性能测试PTS对云服务器ECS进行规格选择与性能压测。
目录
相关文章
|
1月前
|
运维 Prometheus 监控
如何在测试环境中保持操作系统、浏览器版本和服务器配置的稳定性和一致性?
如何在测试环境中保持操作系统、浏览器版本和服务器配置的稳定性和一致性?
|
2月前
|
测试技术 持续交付 Apache
Python性能测试新风尚:JMeter遇上Locust,性能分析不再难🧐
【10月更文挑战第1天】Python性能测试新风尚:JMeter遇上Locust,性能分析不再难🧐
169 3
|
1月前
|
测试技术 持续交付 Apache
Python性能测试新风尚:JMeter遇上Locust,性能分析不再难🧐
Python性能测试新风尚:JMeter遇上Locust,性能分析不再难🧐
77 3
|
2月前
|
安全 网络安全 数据库
Kali渗透测试:使用工具Metasploit攻击操作系统(一)
Kali渗透测试:使用工具Metasploit攻击操作系统(一)
242 0
|
2月前
|
安全 Linux 网络安全
Kali渗透测试:使用工具Metasploit攻击操作系统(二)
Kali渗透测试:使用工具Metasploit攻击操作系统(二)
315 0
|
3月前
|
测试技术 持续交付 Apache
Python性能测试新风尚:JMeter遇上Locust,性能分析不再难🧐
【9月更文挑战第10天】随着软件应用的不断扩展,性能测试成为确保系统稳定运行的关键环节。本文通过对比Apache JMeter和Locust,探讨了如何在Python环境中利用这两款工具挖掘更多性能测试潜力。JMeter是一款成熟且功能强大的开源工具,支持多种协议,适用于各种应用的测试;而Locust则基于Python,通过简单脚本模拟HTTP请求,更适合Web应用测试。
106 3
|
4月前
|
Web App开发 敏捷开发 测试技术
自动化测试框架的设计与实现探索操作系统的心脏:内核与用户空间的交互
【8月更文挑战第26天】本文旨在探讨自动化测试框架的设计原则、核心组件和实现方法。通过分析自动化测试的优势,我们深入讨论了框架设计的关键考虑因素,包括模块化、可重用性、可扩展性和易维护性。文章还介绍了如何利用流行的测试工具和编程语言来实现一个高效的自动化测试框架,并通过实例展示了框架的应用。
|
5月前
|
人工智能 运维 自然语言处理
操作系统智能助手OS Copilot体验与测试结果
OS Copilot是基于大模型构建的操作系统智能助手,支持命令行自然语言问答、辅助命令执行、阿里云CLI调用、系统运维和调优等功能,帮助您更好地使用Alibaba Cloud Linux,提高Alibaba Cloud Linux的使用效率。
操作系统智能助手OS Copilot体验与测试结果
|
5月前
|
敏捷开发 监控 Devops
自动化测试框架的选择与实践揭秘操作系统的心脏:内核
【7月更文挑战第31天】在软件开发的生命周期中,测试阶段占据着举足轻重的地位。随着敏捷开发的流行和DevOps文化的渗透,自动化测试成为提升软件交付速度和质量的关键工具。本文将探讨自动化测试框架的选择标准,并通过一个实际案例来展示如何有效实施自动化测试策略,旨在为读者提供一套清晰的指导思路和实操经验。
31 0
|
5月前
|
机器学习/深度学习 算法 数据挖掘
操作系统调度算法的演进与性能分析
随着计算机科学的发展,操作系统作为硬件与软件之间的桥梁,其调度算法对系统性能有着举足轻重的影响。本文将探讨操作系统中调度算法的演变,从早期的简单调度策略到现代复杂的多级反馈队列和实时调度机制,并结合最新研究和实验数据,深入分析不同调度算法对系统吞吐量、响应时间及资源利用率的影响。通过对调度算法性能的定量评估,本文旨在为系统设计者提供优化决策的理论依据,同时为未来调度算法的研究指明方向。
54 0