csw是什么意思?(关于Linux性能调优中系统CPU监控信息统计的一些注意事项)
admin
2023-10-15 14:20:26

写在前面

本文内容参考书籍《Linux性能优化》中文版,学习后记录。有兴趣的伙伴可以支持一下本文涉及的内容:CPU相关基本指标的说明:运行队列、平均负载、上下文切换、中断、CPU使用率。CPU监控信息统计常用工具中CPU信息的统计方法:vmstat、mpstat、sar、TOP(3.0)人总是害怕去追求自己最重要的梦想,因为他们觉得自己不配拥有,或者觉得自己没有能力去完成。——保罗.柯艾略 《牧羊少年奇幻之旅》 .

CPU相关的基础指标

运行队列统计

在Linux中,可以运行或阻塞一个进程(等待一个事件的完成)。阻塞进程可能正在等待来自I/O设备的数据或系统调用的结果。

如果一个进程是可运行的,这意味着它将与其他可运行的进程竞争CPU时间。一个可运行的进程可能不一定使用CPU,但是当Linux调度程序决定运行下一个进程时,它会从可运行的进程队列中挑选。

如果进程是可运行的,同时又在等待使用处理器,这些进程就构成了运行队列。运行队列越长,处于等待状态的进程就越多性能工具通常给出可以运行的进程数量和等待I/O的阻塞进程数量.

平均负载

系统的负载是指正在运行和可运行的进程总数.例如,如果有两个正在运行的进程和三个可运行的进程,那么系统负载是5,平均负载是给定时间内的负载。

上下文切换

造成订单处理器同时运行多项任务的假象,Linux内核就要不断地在不同的进程间切换。这种不同进程间的切换称为上下文切换.

上下文切换时,CPU要保存旧进程的所有上下文信息,取出新进程的所有上下文信息。上下文包含了很多关于Linux跟踪新进程的信息,包括:进程正在执行的指令,分配给进程的内存,进程打开的文件等.

上下文切换涉及大量信息的移动,上下文切换的开销可以是相当大的.

上下文切换可以是内核调度的结果。为了保证公平地给每个进程分配处理器时间,内核周期性地中断正在运行的进程,在适当的情况下,内核调度程序会决定启动另一个进程,而不是让当前进程继续执行。每当这种周期性中断或定时发生时,系统可以切换上下文。每秒钟定时中断的数量与架构和内核版本有关。

一个检查中断频率的简单方法是用/proc/interrupts文件,它可以确定已知时长内发生的中断次数。

[root@vms81.liruilongs.github.io]-[~]$cat/proc/interrupts|greptime;睡眠5;猫/处理器/中断|上面定时器的启动频率为(9896498-9901529)/5=1000,即每秒要终端1000次,同时也可以理解为内核为sleep进程分配了1000次CPU,greptime0:3370io-apic-edgetimerloc:98964989871317localtimerinterrupts0:3370io-apic-edgetimerloc:99015299876213localtimerinterrupts[r oot@vms81.liruilongs.github.io]-[~]$

如果您的上下文切换不仅仅是定时器中断,那么这些切换很可能是由I/O请求或其他长时间运行的系统调用(如休眠)引起的。当应用程序请求的操作不能立即完成时,内核启动操作,保存请求的进程,并尝试切换到另一个就绪的进程。这使处理器尽可能忙碌。

中断

处理器还周期性地从硬件设备接收中断。当设备有事件需要内核处理时,它通常就会触发这些中断。

例如,如果磁盘控制器刚刚从驱动器中提取完数据块,并准备将它们提供给内核,则磁盘控制器将触发一个中断。对于内核收到的每一个中断,如果有对应的注册的中断处理程序,运行程序,否则该中断将被忽略。

中断处理程序在系统中具有很高的运行优先级,并且通常执行速度也很快.查看/proc/interrupts文件可以显示哪个CPU触发了哪个中断。

[root@vms81.liruilongs.github.io]-[~]$cat/proc/interruptscpu0cpu10:3370io-apic-edgetimer1:100io-apic-edgei80428:10io-apic-edgertc09:00io-apic-fasteoiacpi12:160i

O-APIC-edgei804214:00IO-APIC-edgeata_piix15:00IO-APIC-edgeata_piix17:579390IO-APIC-fasteoiioc018:149800IO-APIC-fasteoiens3224:00PCI-MSI-edgePCIePME,pciehp25:00PCI-MSI-edgePCIePME,pciehp26:00PCI-MSI-edgePCIePME,pciehp27:00PCI-MSI-edgePCIePME,pciehp.......................THR:00ThresholdAPICinterruptsDFR:00DeferredErrorAPICinterruptsMCE:00MachinecheckexceptionsMCP:3737MachinecheckpollsERR:0MIS:0PIN:00Posted-interruptnotificationeventPIW:00Posted-interruptwakeupevent┌──[root@vms81.liruilongs.github.io]-[~]└─$

CPU使用率

在任何给定的时间,CPU可以执行以下七件事情中的一个

CPU可以是空闲的,这意味着处理器实际上没有做任何工作,并且等待有任务可以执行。

CPU可以运行用户代码,即指定的“用户”时间。

CPU可以执行Linux内核中的应用程序代码,这就是“系统”时间。

CPU可以执行“比较友好”的或者优先级被设置为低于一般进程的用户代码。

CPU可以处于iowait状态,即系统正在等待10(如磁盘或网络)完成。

CPU可以处于irq状态,即它正在用高优先级代码处理硬件中断。

CPU可以处于softirq模式,即系统正在执行同样由中断触发的内核代码,只不过其运行于较低优先级(下半部代码)

一个具有高“系统”百分比的系统表明其大部分时间都消耗在了内核上。像oprofile一样的工具可以帮助确定时间都消耗在了哪里。具有高“用户”时间的系统则将其大部分时间都用来运行应用程序。

CPU监控信息统计

vmstat(虚拟内存统计)

vmstat是一个很有用的命令,它能获取整个系统性能的粗略信息,包括:

正在运行的进程个数CPU的使用情况CPU接收的中断个数调度器执行的上下文切换次数

语法

┌──(liruilong㉿Liruilong)-[/mnt/c/Users/lenovo]└─$vmstat-helpUsage:vmstat[options][delay[count]]Options:-a,--activeactive/inactivememory-f,--forksnumberofforkssinceboot-m,--slabsslabinfo-n,--one-headerdonotredisplayheader-s,--statseventcounterstatistics-d,--diskdiskstatistics-D,--disk-sumsummarizediskstatistics-p,--partitionpartitionspecificstatistics-S,--unitdefinedisplayunit-w,--widewideoutput-t,--timestampshowtimestamp-h,--helpdisplaythishelpandexit-V,--versionoutputversioninformationandexitFormoredetailsseevmstat(8).┌──(liruilong㉿Liruilong)-[/mnt/c/Users/lenovo]└─$

CPU性能相关的选项

$vmstat[-n][-s][delay[count]]

vmstat运行于两种模式:采样模式和平均模式。如果不指定参数,则vmstat统计运行于平均模式下.

vmstat显示从系统启动以来所有统计数据的均值。但是,如果指定了延迟,那么第一个采样仍然是系统启动以来的均值,但之后vmstat按延迟秒数采样系统并显示统计数据。

参数

-n参数的区别

┌──[root@vms81.liruilongs.github.io]-[~]└─$vmstat1procs-----------memory-------------swap-------io-----system--------cpu-----rbswpdfreebuffcachesisobiboincsussyidwast20010647722072176479600602615018328487100001064964207217648000007029934939198730000010644002072176480000002832691624106600..............00010641562072176495200032244939003295000001064196207217648600001626474124629100procs-----------memory-------------swap-------io-----system--------cpu-----rbswpdfreebuffcachesisobiboincsussyidwast400105882820721764860000243121518284880010010646082072176482000003070529710683000001064608207217648200003226744136329500000106429620721764820000025603943319500^C
┌──[root@vms81.liruilongs.github.io]-[~]└─$vmstat-n1procs-----------memory-------------swap-------io-----system--------cpu-----rbswpdfreebuffcachesisobiboincsussyidwast1001063952207217648080059261501838848710700106447220721764812000382869461194870020010634762072176487600028346781763115540000010634762072176487600002482362914284000001063476207217648760002824593691329600000106336820721764864000362691406151940000010628642072176486400044271444206292000001063104207217648640003229634514838800............10010638682072176500000010726576989331452000001063868207217650000000283043156391000001063868207217650000002824303908539200000106386820721765000000023583551229600.........10010641362072176511200002736400063910040010637642072176511200048249237795293100001063484207217651120000265040714294000001063304207217651160009927274430739000000106339220721765116000122554381121970000010640122072176512000048258542911458100000106413620721765120000025764057429400^C┌──[root@vms81.liruilongs.github.io]-[~]└─$

-s的统计

┌──[root@vms81.liruilongs.github.io]-[~]└─$vmstat-s4030172Ktotalmemory1199020Kusedmemory1277200Kactivememory1428408Kinactivememory1064028Kfreememory2072Kbuffermemory1765052Kswapcache0Ktotalswap0Kusedswap0Kfreeswap206387non-niceusercputicks3niceusercputicks100381systemcputicks2184710idlecputicks12604IO-waitcputicks0IRQcputicks4699softirqcputicks0stolencputicks1473622pagespagedin652550pagespagedout0pagesswappedin0pagesswappedout37633050interrupts64361523CPUcontextswitches1642162657boottime210962forks┌──[root@vms81.liruilongs.github.io]-[~]└─$

CPU相关的列名含义

CPU相关的列名含义

vmstat的开销很低,可以让它在控制台上或窗口中持续运行,甚至是在负载非常重的服务器上是很实用的。

┌──[root@vms81.liruilongs.github.io]-[~]└─$vmstatprocs-----------memory-------------swap-------io-----system--------cpu-----rbswpdfreebuffcachesisobiboincsussyidwast2001057540207217610120068271501595848710┌──[root@vms81.liruilongs.github.io]-[~]└─$

查看CPU平均值,当前系统中,可运行进程为2®,被阻塞的进程为0(b),系统发生中断次数1501(in),系统发生上下文切换次数为595(cs),系统代码消耗CPU为4%(sy),用户代码消耗CPU为8%(us),系统空闲占比87%(id),剩余1%属于等待IO消耗的CPU空闲状态(wa),

上下文切换的数量小于中断的数量。调度器切换进程的次数少于定时器中断触发的次数。这很可能是因为系统基本上是空闲的,在定时器中断触发的大多数时候,调度器没有任何工作要做,因此它也不需要从空闲进程切换出去。

CPU统计的含义

┌──[root@vms81.liruilongs.github.io]-[~]└─$vmstat-s..........206387non-niceusercputicks3niceusercputicks100381systemcputicks2184710idlecputicks12604IO-waitcputicks0IRQcputicks4699softirqcputicks0stolencputicks............37633050interrupts64361523CPUcontextswitches...........210962forks

这里的ticks为一个时间单位,相关数据为自系统启动时间以来的数据。forks表示系统创建以来的进程数,CPUcontextswitches表示上下文文切换次数,interrupts即中断次数,剩下的参数对应上面的列理解即可,stolencpu这个不太理解

top(3.0.X版本)

top小伙伴应该不陌生,不多讲,直接看语法

语法

┌──[root@vms81.liruilongs.github.io]-[~]└─$top-helpprocps-ngversion3.3.10Usage:top-hv|-bcHiOSs-dsecs-nmax-u|Uuser-ppid(s)-ofield-w[cols]┌──[root@vms81.liruilongs.github.io]-[~]└─$

top呈现为一个降序列表,排在最前面的是最占用CPU的进程。

CPU性能相关的选项

$top[-ddelay][-niter][-i][-b]

top实际有两种模式的选项:命令行选项和运行时选项。

命令行选项

命令行选项决定top如何显示其信息。

命令行选项

下面问间隔3s统计2次的top信息

┌──[root@vms81.liruilongs.github.io]-[~]└─$top-d3-n2top-09:26:22up13:08,1user,loadaverage:0.56,0.48,0.55Tasks:215total,1running,214sleeping,0stopped,0zombie%Cpu(s):9.9us,5.5sy,0.0ni,84.3id,0.2wa,0.0hi,0.2si,0.0stKiBMem:4030172total,1079708free,1204872used,1745592buff/cacheKiBSwap:0total,0free,0used.2470484availMemPIDUSERPRNIVIRTRESSHRS%CPU%MEMTIME+COMMAND2195root200117490438098847392S10.09.595:15.71kube-apiserver963root200177798814237659968S5.63.541:04.34kubelet2204root2008237289831236136S5.62.447:06.26kube-controller4348root20016578204748821052S5.31.242:28.29calico-node2266root20010.696g7763219904S3.01.923:51.16etcd1121root20013698208507628388S2.72.115:55.04dockerd973root20010991924351216860S0.71.14:32.81containerd3057root2007377562990412424S0.70.73:34.82speaker3564root200713096151524312S0.70.41:50.31containerd-shim4313root200713096155964256S0.70.41:25.70containerd-shim9root200000S0.30.02:05.06rcu_sched13root200000S0.30.00:07.26ksoftirqd/12214root2007542684185619352S0.31.04:25.88kube-scheduler3774root2007512323403215932S0.30.81:25.77coredns4261root2007514883083215880S0.30.81:30.06coredns4369polkitd2007455323323214124S0.30.80:21.00kube-controller1root20019102440282516S0.00.10:47.38systemd2root200000S0.00.00:00.05kthreadd3root200000S0.00.00:07.85ksoftirqd/04root200000S0.00.00:06.99kworker/0:0.......

下面为只显示非空闲进程

┌──[root@vms81.liruilongs.github.io]-[~]└─$top-itop-09:35:45up13:18,1user,loadaverage:0.17,0.45,0.53Tasks:216total,3running,213sleeping,0stopped,0zombie%Cpu(s):7.4us,3.2sy,0.0ni,89.1id,0.0wa,0.0hi,0.2si,0.0stKiBMem:4030172total,1070632free,1213464used,1746076buff/cacheKiBSwap:0total,0free,0used.2461980availMemPIDUSERPRNIVIRTRESSHRS%CPU%MEMTIME+COMMAND2195root200117490438098847392S14.39.596:25.19kube-apiserver2204root2008237289831236136S6.32.447:40.78kube-controller4348root20016578204751621052S5.31.242:59.36calico-node963root200177798814171259968S4.33.541:34.55kubelet2266root20010.696g7868419904S3.32.024:08.17etcd40370root200745236171688388R2.30.40:00.07calico1121root20013698208549628388S1.72.116:06.78dockerd2214root2007542684185619352S0.71.04:28.98kube-scheduler3057root2007377563013612424S0.70.73:37.40speaker9root200000S0.30.02:06.53rcu_sched3023root200713096128923636S0.30.30:05.56containerd-shim┌──[root@vms81.liruilongs.github.io]-[~]└─$

-b显示全部的进程,默认只显示当前的页能容纳的进程

┌──[root@vms81.liruilongs.github.io]-[~]└─$top-d3-n1-btop-09:31:42up13:14,1user,loadaverage:1.21,0.70,0.61Tasks:215total,1running,214sleeping,0stopped,0zombie%Cpu(s):3.6us,3.6sy,0.0ni,92.9id,0.0wa,0.0hi,0.0si,0.0stKiBMem:4030172total,1078040free,1206028used,1746104buff/cacheKiBSwap:0total,0free,0used.2469136availMemPIDUSERPRNIVIRTRESSHRS%CPU%MEMTIME+COMMAND963root200177798814159259968S12.53.541:21.46kubelet36906root20015771621241496R12.50.10:00.02top2195root200117490438098847392S6.29.595:55.13kube-apiserver2266root20010.696g7868419904S6.22.024:00.85etcd3057root2007377563046012424S6.20.83:36.32speaker4348root20016578204730421052S6.21.242:45.70calico-node1root20019102440282516S0.00.10:47.68systemd2root200000S0.00.00:00.05kthreadd3root200000S0.00.00:07.90ksoftirqd/04root200000S0.00.00:07.03kworker/0:0........31root200000S0.00.00:00.00kswapd032root255000S0.00.00:00.00ksmd33root3919000S0.00.00:01.02khugepaged34root0-20000S0.00.00:00.00crypto42root0-20000S0.00.00:00.00kthrotld44root0-20000S0.00.00:00.00kmpath_rdacd45root0-20000S0.00.00:00.00kpsmoused46root200000S0.00.00:00.00kworker/0:2........259root0-20000S0.00.00:00.00scsi_tmf_4260root200000S0.00.00:00.00scsi_eh_6261root0-20000S0.00.00:00.00scsi_tmf_6262root200000S0.00.00:00.00scsi_eh_7.........273root0-20000S0.00.00:00.00scsi_tmf_12274root200000S0.00.00:00.00scsi_eh_13275root0-20000S0.00.00:00.00scsi_tmf_13276root200000S0.00.00:00.00scsi_eh_14277root0-20000S0.00.00:00.00scsi_tmf_14278root200000S0.00.00:00.00scsi_eh_15279root0-20000S0.00.00:00.00scsi_tmf_15...........4297root2004228400328S0.00.00:00.00runsv4313root200713096153404256S0.00.41:26.26containerd-shim4344root20011411843574816600S0.00.90:08.70calico-node4345root20015835763930018152S0.01.00:08.09calico-node4346root20011411843680817568S0.00.90:11.15calico-node4369polkitd2007455323323214124S0.00.80:21.13kube-controller4526root200756260196S0.00.00:24.63bird64534root200772520340S0.00.00:24.92bird14142root200000S0.00.00:00.00kworker/u256:121599root200000S0.00.00:00.21kworker/1:126382root200000S0.00.00:00.49kworker/1:035491root200000S0.00.00:00.00kworker/1:277429root20014831655324232S0.00.10:00.50sshd77553root20012090075561704S0.00.20:00.18bash83235root200000S0.00.00:01.76kworker/u256:087183postfix2008964840243012S0.00.10:00.01pickup┌──[root@vms81.liruilongs.github.io]-[~]└─$

运行时top选项

运行时top

输入A后,显示为各个系统资源的最大消耗者,这个看不太懂,以后再研究

┌──[root@vms81.liruilongs.github.io]-[~]└─$top-i1:Def-09:40:01up13:22,1user,loadaverage:0.17,0.35,0.47Tasks:215total,1running,214sleeping,0stopped,0zombie%Cpu(s):11.6us,6.6sy,0.0ni,81.6id,0.0wa,0.0hi,0.2si,0.0stKiBMem:4030172total,1076864free,1206808used,1746500buff/cacheKiBSwap:0total,0free,0used.2468492availMem1PIDUSERPRNIVIRTRESSHRS%CPU%MEMTIME+COMMAND2204root2008237289831236136S6.32.447:55.47kube-controller4348root20016578204744421052S5.31.243:12.72calico-node1121root20013698208549628388S2.62.116:11.81dockerd2266root20010.696g7894819904S2.62.024:15.45etcd973root20010991924378416860S1.01.14:37.63containerd2214root2007542684185619352S0.71.04:30.34kube-scheduler1root20019102440282516S0.30.10:48.12systemd2PIDPPIDTIME+%CPU%MEMPRNISVIRTRESUIDCOMMAND8323520:01.820.00.0200S000kworker/u256:077553774290:00.200.00.2200S12090075560bash774299660:00.710.00.1200S14831655320sshd4336810850:00.020.00.1200S89648402489pickup4024720:00.170.30.0200S000kworker/1:140239775530:01.260.30.1200R15772023320top3549120:00.000.00.0200S000kworker/1:23PID%MEMVIRTRESCODEDATASHRnMajnDRT%CPUCOMMAND21959.51174904380988600521052908473923308.9kube-apiserver9633.517782441412288884816182045996852007.0kubelet22042.48237289831256280708052361363306.3kube-controller11212.1136982085496572401239752283883402.6dockerd22662.010.696g789481182470682819904602.6etcd43481.216578204744430688159073621052005.3calico-node9731.11099192437843375210413401686048801.0containerd22141.07542684185623924706288193521600.7kube-scheduler4PIDPPIDUIDUSERRUSERTTYTIME+%CPU%MEMSCOMMAND975129rpcuserrpcuser?0:00.010.00.0Srpc.statd567132rpcrpc?0:00.190.00.0Srpcbind100rootroot?0:48.120.30.1Ssystemd200rootroot?0:00.050.00.0Skthreadd320rootroot?0:07.970.00.0Sksoftirqd/0420rootroot?0:07.090.00.0Skworker/0:0520rootroot?0:00.000.00.0Skworker/0:0H720rootroot?0:01.090.00.0Smigration/0

输入F时进入配置界面,通过界面显示可以配置详细信息

┌──[root@vms81.liruilongs.github.io]-[~]└─$top-itop-09:48:03up13:30,1user,loadaverage:0.85,0.64,0.57Tasks:215total,1running,214sleeping,0stopped,0zombie%Cpu(s):3.4us,3.4sy,0.0ni,93.1id,0.0wa,0.0hi,0.0si,0.0stKiBMem:4030172total,1076900free,1206184used,1747088buff/cacheKiBSwap:0total,0free,0used.2469016availMemPIDUSERPRNIVIRTRESSHRS%CPU%MEMTIME+COMMAND2204root2008237289831236136S12.52.448:24.22kube-controller963root200177824414222859968S6.23.542:12.13kubelet2266root20010.696g7946819904S6.22.024:29.30etcd4348root20016578204739621052S6.21.243:37.87calico-node50999root20015772022001500R6.20.10:00.01topFieldsManagementforwindow1:Def,whosecurrentsortfieldis%CPUNavigatewithUp/Dn,RightselectsformovethenorLeftcommits,'d'ortogglesdisplay,'s'setssort.Use'q'ortoend!*PID=ProcessIdSUPGIDS=SuppGroupsIDs*USER=EffectiveUserNameSUPGRPS=SuppGroupsNames*PR=PriorityTGID=ThreadGroupId*NI=NiceValueENVIRON=Environmentvars*VIRT=VirtualImage(KiB)vMj=MajorFaultsdelta*RES=ResidentSize(KiB)vMn=MinorFaultsdelta*SHR=SharedMemory(KiB)USED=Res+SwapSize(KiB)*S=ProcessStatusnsIPC=IPCnamespaceInode*%CPU=CPUUsagensMNT=MNTnamespaceInode*%MEM=MemoryUsage(RES)nsNET=NETnamespaceInode*TIME+=CPUTime,hundredthsnsPID=PIDnamespaceInode*COMMAND=CommandName/LinensUSER=USERnamespaceInodePPID=ParentProcesspidnsUTS=UTSnamespaceInodeUID=EffectiveUserIdRUID=RealUserIdRUSER=RealUserNameSUID=SavedUserIdSUSER=SavedUserNameGID=GroupIdGROUP=GroupNamePGRP=ProcessGroupIdTTY=ControllingTtyTPGID=TtyProcessGrpIdSID=SessionIdnTH=NumberofThreadsP=LastUsedCpu(SMP)TIME=CPUTimeSWAP=SwappedSize(KiB)CODE=CodeSize(KiB)DATA=Data+Stack(KiB)nMaj=MajorPageFaultsnMin=MinorPageFaultsnDRT=DirtyPagesCountWCHAN=SleepinginFunctionFlags=TaskFlagsCGROUPS=ControlGroups

在配置统计信息时,所有当前被选择的字段将会以大写形式显示在CurrentField.Order行,并在其名称旁出现一个星号(*),使用d来选择删除,使用s保存,q退出

修改只留5个列名展示

FieldsManagementforwindow1:Def,whosecurrentsortfieldis%CPUNavigatewithUp/Dn,RightselectsformovethenorLeftcommits,'d'ortogglesdisplay,'s'setssort.Use'q'ortoend!*PID=ProcessIdSUPGIDS=SuppGroupsIDs*USER=EffectiveUserNameSUPGRPS=SuppGroupsNamesPR=PriorityTGID=ThreadGroupIdNI=NiceValueENVIRON=EnvironmentvarsVIRT=VirtualImage(KiB)vMj=MajorFaultsdeltaRES=ResidentSize(KiB)vMn=MinorFaultsdeltaSHR=SharedMemory(KiB)USED=Res+SwapSize(KiB)S=ProcessStatusnsIPC=IPCnamespaceInode*%CPU=CPUUsagensMNT=MNTnamespaceInode*%MEM=MemoryUsage(RES)nsNET=NETnamespaceInodeTIME+=CPUTime,hundredthsnsPID=PIDnamespaceInode*COMMAND=CommandName/LinensUSER=USERnamespaceInodePPID=ParentProcesspidnsUTS=UTSnamespaceInodeUID=EffectiveUserIdRUID=RealUserIdRUSER=RealUserNameSUID=SavedUserIdSUSER=SavedUserNameGID=GroupIdGROUP=GroupNamePGRP=ProcessGroupIdTTY=ControllingTty.....

返回后发现只显示了5列

top-09:55:38up13:38,1user,loadaverage:2.16,1.20,0.80Tasks:215total,2running,213sleeping,0stopped,0zombie%Cpu(s):8.1us,4.7sy,0.0ni,87.0id,0.0wa,0.0hi,0.2si,0.0stKiBMem:4030172total,1085120free,1197260used,1747792buff/cacheKiBSwap:0total,0free,0used.2477772availMemPIDUSER%CPU%MEMCOMMAND2195root14.39.5kube-apiserver2266root8.01.7etcd2204root6.02.4kube-controller4348root5.01.2calico-node963root4.73.5kubelet1121root1.32.1dockerd3057root0.70.8speaker9root0.30.0rcu_sched542root0.30.2vmtoolsd973root0.31.1containerd2214root0.31.0kube-scheduler49390root0.30.0kworker/1:2

top性能统计信息

top性能统计信息

%Cpu(s):5.3us(用户消耗),2.8sy(系统消耗),0.0ni(友好值进程消耗),91.9id(空闲CPU),0.0wa(等待I/O的CPU时间),0.0hi(irp处理程序消耗的CPU时间),0.0si(softirq处理消耗),0.0st(这个不知道)

top-09:26:22up13:08,1user,loadaverage:0.56,0.48,0.55(1分钟、5分钟和15分钟的平均负载)

列名command为当前进程执行的命令,更多小伙伴可以结合命令列表理解

mpstat(多处理器统计)

mpstat是一个相当简单的命令,向你展示随着时间变化的CPU行为。mpstat最大的优点是在统计信息的旁边显示时间,由此,你可以找出CPU使用率与时间的关系。

如果你有多个CPU或超线程CPU,mpstat还能够把CPU使用率按处理器进行区分,因此你可以发现与其他处理器相比,是否某个处理器做了更多的工作。你可以选择想要监控的单个处理器,也可以要求mpstat对所有的处理器都进行监控。

语法

┌──[root@liruilongs.github.io]-[~]└─$mpstat-help用法:mpstat[选项][<时间间隔>[<次数>]]选项:[-A][-u][-V][-I{SUM|CPU|SCPU|ALL}][-P{[,...]|ON|ALL}]┌──[root@liruilongs.github.io]-[~]└─$

CPU性能相关的选项

mpstat-P{cpu|ALL}|delay[count]]

CPU性能相关的选项

使用-P监控0所在的CPU

┌──[root@liruilongs.github.io]-[~]└─$mpstat-P0Linux3.10.0-693.el7.x86_64(liruilongs.github.io)2022年01月15日_x86_64_(2CPU)11时31分09秒CPU%usr%nice%sys%iowait%irq%soft%steal%guest%gnice%idle11时31分09秒00.530.000.530.060.000.060.000.000.0098.82┌──[root@liruilongs.github.io]-[~]└─$mpstat-P1Linux3.10.0-693.el7.x86_64(liruilongs.github.io)2022年01月15日_x86_64_(2CPU)11时31分13秒CPU%usr%nice%sys%iowait%irq%soft%steal%guest%gnice%idle11时31分13秒10.520.000.530.060.000.050.000.000.0098.84┌──[root@liruilongs.github.io]-[~]└─$

监控所有的CPU

┌──[root@liruilongs.github.io]-[~]└─$mpstat-PALLLinux3.10.0-693.el7.x86_64(liruilongs.github.io)2022年01月15日_x86_64_(2CPU)11时35分17秒CPU%usr%nice%sys%iowait%irq%soft%steal%guest%gnice%idle11时35分17秒all0.530.000.530.060.000.060.000.000.0098.8311时35分17秒00.530.000.530.060.000.060.000.000.0098.8211时35分17秒10.520.000.520.060.000.050.000.000.0098.84┌──[root@liruilongs.github.io]-[~]└─$

监控3次,间隔1秒

┌──[root@liruilongs.github.io]-[~]└─$mpstat-P013Linux3.10.0-693.el7.x86_64(liruilongs.github.io)2022年01月15日_x86_64_(2CPU)11时33分15秒CPU%usr%nice%sys%iowait%irq%soft%steal%guest%gnice%idle11时33分16秒00.000.000.000.000.000.000.000.000.00100.0011时33分17秒00.000.000.000.000.000.000.000.000.00100.0011时33分18秒00.000.000.000.000.000.000.000.000.00100.00平均时间:00.000.000.000.000.000.000.000.000.00100.00┌──[root@liruilongs.github.io]-[~]└─$

CPU统计信息

┌──[root@liruilongs.github.io]-[~]└─$mpstat-PALL12Linux3.10.0-693.el7.x86_64(liruilongs.github.io)2022年01月15日_x86_64_(2CPU)11时37分52秒CPU%usr%nice%sys%iowait%irq%soft%steal%guest%gnice%idle11时37分53秒all0.000.000.000.000.000.000.000.000.00100.0011时37分53秒00.000.000.000.000.000.000.000.000.00100.0011时37分53秒10.000.000.000.000.000.000.000.000.00100.0011时37分53秒CPU%usr%nice%sys%iowait%irq%soft%steal%guest%gnice%idle11时37分54秒all0.510.000.000.000.000.000.000.000.0099.4911时37分54秒01.020.000.000.000.000.000.000.000.0098.9811时37分54秒10.000.000.000.000.000.000.000.000.00100.00平均时间:CPU%usr%nice%sys%iowait%irq%soft%steal%guest%gnice%idle平均时间:all0.260.000.000.000.000.000.000.000.0099.74平均时间:00.510.000.000.000.000.000.000.000.0099.49平均时间:10.000.000.000.000.000.000.000.000.00100.00┌──[root@liruilongs.github.io]-[~]└─$

sar(系统活动报告)

sar是一种低开销的、记录系统执行情况信息的方法

sar命令可以用于记录性能信息,回放之前的记录信息,以及显示当前系统的实时信息。sar命令的输出可以进行格式化,使之易于导入数据库,或是输送给其他Linux命令进行处理。

如果没有命令,可以启动服务看看

┌──[root@liruilongs.github.io]-[/usr/lib/systemd/system]└─$pwd/usr/lib/systemd/system┌──[root@liruilongs.github.io]-[/usr/lib/systemd/system]└─$catsysstat.service#/usr/lib/systemd/system/sysstat.service#(C)2012PeterSchiffer(pschifferedhat.com)##sysstat-10.1.5systemdunitfile:#Insertadummyrecordincurrentdailydatafile.#Thisindicatesthatthecountershaverestartedfrom0.[Unit]Description=ResetsSystemActivityLogs[Service]Type=oneshotRemainAfterExit=yesUser=rootExecStart=/usr/lib64/sa/sa1--boot[Install]WantedBy=multi-user.target┌──[root@liruilongs.github.io]-[/usr/lib/systemd/system]└─$systemctlstatussysstat.service●sysstat.service-ResetsSystemActivityLogsLoaded:loaded(/usr/lib/systemd/system/sysstat.service;enabled;vendorpreset:enabled)Active:active(exited)sinceWed2021-10-1301:53:41CST;1weeks3daysagoMainPID:584(code=exited,status=0/SUCCESS)CGroup:/system.slice/sysstat.serviceOct1301:53:41liruilongs.github.iosystemd[1]:StartingResetsSystemActivityLogs...Oct1301:53:41liruilongs.github.iosystemd[1]:StartedResetsSystemActivityLogs.

语法

命令帮助文档

┌──[root@liruilongs.github.io]-[~]└─$sar-h用法:sar[选项][<时间间隔>[<次数>]]主选项和报告:-bI/O和传输速率信息状况-B分页状况-d块设备状况-F[MOUNT]Filesystemsstatistics-H交换空间利用率-I{<中断>|SUM|ALL|XALL}中断信息状况-m{<关键词>[,...]|ALL}电源管理统计信息关键字:CPUCPU频率FAN风扇速度\t\tFREQ\tCPU平均时钟频率IN输入电压TEMP设备温度\t\tUSB\t连接的USB设备-n{<关键词>[,...]|ALL}网络统计信息关键词可以是:DEV网卡EDEV网卡(错误)NFSNFS客户端NFSDNFS服务器SOCKSockets(套接字)(v4)IPIP流(v4)EIPIP流(v4)(错误)ICMPICMP流(v4)EICMPICMP流(v4)(错误)TCPTCP流(v4)ETCPTCP流(v4)(错误)UDPUDP流(v4)SOCK6Sockets(套接字)(v6)IP6IP流(v6)EIP6IP流(v6)(错误)ICMP6ICMP流(v6)EICMP6ICMP流(v6)(错误)UDP6UDP流(v6)-q队列长度和平均负载-r内存利用率-R内存状况-S交换空间利用率-u[ALL]CPU利用率-vKerneltable状况-w任务创建与系统转换统计信息-W交换信息-yTTY设备状况┌──[root@liruilongs.github.io]-[~]└─$

红帽8没有,需要自己开启,红帽7有,下面为历史监控的存放位置

┌──[root@liruilongs.github.io]-[/]└─$cd/var/log/sa┌──[root@liruilongs.github.io]-[/var/log/sa]└─$lssa01sa03sa04sa05sa06sa08sa09sa13sa14sa23sa24sa30sar03

CPU性能相关的选项

$sar[options][]delay[count]]

尽管sar的报告涉及Linux多个不同领域,其统计数据有两种不同的形式。一组统计数据是采样时的瞬时值。另一组则是自上一次采样后的变化值。

sar命令行选项

┌──[root@liruilongs.github.io]-[~]└─$sarLinux3.10.0-693.el7.x86_64(liruilongs.github.io)2022年01月15日_x86_64_(2CPU)11时00分01秒CPU%user%nice%system%iowait%steal%idle11时10分01秒all0.120.000.120.000.0099.7611时20分01秒all0.110.000.110.000.0099.7811时30分01秒all0.130.000.130.000.0099.7311时40分01秒all0.110.000.110.000.0099.78平均时间:all0.120.000.120.000.0099.76

使用-o选项输出到指定文件

┌──[root@liruilongs.github.io]-[~]└─$sar-o/tmp/apache_tets13Linux3.10.0-693.el7.x86_64(liruilongs.github.io)2022年01月15日_x86_64_(2CPU)18时02分24秒CPU%user%nice%system%iowait%steal%idle18时02分25秒all0.000.000.560.000.0099.4418时02分26秒all0.000.000.000.000.00100.0018时02分27秒all0.000.000.000.000.00100.00平均时间:all0.000.000.180.000.0099.82

通过-f来查看指定文件信息

┌──[root@liruilongs.github.io]-[~]└─$sar-f/tmp/apache_tetsLinux3.10.0-693.el7.x86_64(liruilongs.github.io)2022年01月15日_x86_64_(2CPU)18时02分24秒CPU%user%nice%system%iowait%steal%idle18时02分25秒all0.000.000.560.000.0099.4418时02分26秒all0.000.000.000.000.00100.0018时02分27秒all0.000.000.000.000.00100.00平均时间:all0.000.000.180.000.0099.82┌──[root@liruilongs.github.io]-[~]└─$

使用-P指定CPU

┌──[root@liruilongs.github.io]-[~]└─$sar-P0|head-5Linux3.10.0-693.el7.x86_64(liruilongs.github.io)2022年01月15日_x86_64_(2CPU)11时00分01秒CPU%user%nice%system%iowait%steal%idle11时10分01秒00.120.000.120.010.0099.7511时20分01秒00.120.000.110.000.0099.77┌──[root@liruilongs.github.io]-[~]└─$

-w上下文切换次数

┌──[root@liruilongs.github.io]-[~]└─$sar-P0-w|head-5Linux3.10.0-693.el7.x86_64(liruilongs.github.io)2022年01月15日_x86_64_(2CPU)11时00分01秒proc/scswch/s11时10分01秒0.92313.5811时20分01秒0.81316.81┌──[root@liruilongs.github.io]-[~]└─$

-q运行队列长度和平均负载

┌──[root@liruilongs.github.io]-[~]└─$sar-q|head-5Linux3.10.0-693.el7.x86_64(liruilongs.github.io)2022年01月15日_x86_64_(2CPU)11时00分01秒runq-szplist-szldavg-1ldavg-5ldavg-15blocked11时10分01秒02190.010.080.53011时20分01秒02190.030.030.290

sarCPU统计信息

procinfo(从/proc文件系统显示信息)

procinfo也为系统整体信息特性提供总览,它提供的有些信息与vmstat相同,但它还会给出CPU从每个设备接收的中断数量

CPU性能相关的选项

$procinfo[-f][-d][-D][-nsec][-ffile]

嗯,这个命令没找到,以后再研究下

gnome-system-monitor

嗯,用SSH连接的机器,这个也以后再研究下

oprofile

oprofile是性能工具包,它利用几乎所有现代处理器都有的性能计数器来跟踪系统整体以及单个进程中CPU时间的消耗情况。除了测量CPU周期消耗在哪里之外,oprofile还可以测量关于CPU执行的非常底层的信息。

根据由底层处理器支持的事件,它可以测量的内容包括:cache缺失、分支预测错误和内存引用,以及浮点操作。profile不会记录发生的每个事件,相反,它与处理器性能硬件一起工作,每count个事件采样一次,这里的count是一个数值,由用户在启动oprofile时指定。count的值越·低,结果的准确度越高,而oprofile的开销越大。若count保持在一个合理的数值,那么,oprofile不仅运行开销非常低,并且还能以令人惊讶的准确性描述系统性能。

┌──[root@liruilongs.github.io]-[~]└─$yum-yinstalloprofile

CPU性能相关的选项

oprofile实际上是一组协同工作的组件,用于收集CPU性能统计信息。oprofile主要有三个部分:

oprofile核心模块控制处理器并允许和禁止采样,oprofile后台模块收集采样,并将它们保存到磁盘。oprofile报告工具获取收集的采样,并向用户展示它们与在系统上运行的应用程序的关系

oprofile工具包使用opcontrol命令中。opcontrol命令用于选择处理器采样的事件并启动采样。进行后台控制时,你可以使用如下命令行调用

$opcontrol[--start][--stop][--dump]
┌──[root@liruilongs.github.io]-[~]└─$opcontrol-sATTENTION:Useofopcontrolisdiscouraged.Pleaseseethemanpageforoperf.Novmlinuxfilespecified.Youmustspecifythecorrectvmlinuxfile,e.g.opcontrol--vmlinux=/path/to/vmlinuxIfyoudonothaveavmlinuxfile,useopcontrol--no-vmlinuxEnteropcontrol--helpforfulloptions

这个貌似有些复杂,先不看了,之后遇到有机会再学习

关于CPU的性能调优工具就学到这里,欢迎小伙伴指正

相关内容

热门资讯

盘点2026年好用的童趣风格温... 当亲子度假成为家庭出游的核心刚需,不少父母都陷入了相似的困境:想趁假期泡温泉放松身心,却要全程盯顾精...
伊犁亲子游超全攻略!7天6晚带... 每年6-8月,伊犁就变成了童话世界。无边无际的草原上开满野花,雪山融水汇成清澈的溪流,成群的牛羊在蓝...
丹东:樱韵花开,亲子寻芳 春和景明,连日来丹东迎来最美樱花季。 4月17日,丹东市第三幼儿园“樱韵花开·寻迹花神”第十一届樱花...
守护成长 童心同行—— 翠云轩... “守护成长 童心同行” 就在 4 月 18 日下午,翠云轩小区迎来了第二场别开生面的儿童性教育主题...
2026年新疆奢华亲子游推荐,... 在2026年,选择新疆作为奢华亲子游的家庭越来越多。这里有丰富的自然风光与独特的文化活动,吸引着各个...