300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > 衡量cpu使用情况 - 占用率和负载

衡量cpu使用情况 - 占用率和负载

时间:2021-12-15 09:45:05

相关推荐

衡量cpu使用情况 - 占用率和负载

说明

在对程序进行性能优化过程中,我体会到:正确的衡量cpu的使用情况(各种指标),是进行代码优化的前提条件;CPU是计算机的大脑,所有代码都是由CPU运行,不管是任何因素导致的性能问题,即使是资源不足(例如:内存不足,io较慢等)最终都能在CPU运行指标上得到体现,所以我们通过衡量cpu的各种指标即可对程序性能进行解释。

表现

程序是否卡顿,通常由其外在表现体现,例如:对于GUI程序而言,用户操作时界面是否卡顿,操作是否有延时,对于非GUI程序而言,程序是否反应及时,这些都间接的体现了CPU使用情况;程序的外在表现体现的卡顿都是个人的主观感受,例如:GUI程序卡顿现象是操作延时过大给人造成的卡顿感觉,每个人的容忍度可能也不一样。我们通常使用运行时长来具体的描述程序性能, 程序的外在表现也都能通过指令运行时长来解释,程序的运行时长体现了当时CPU的使用情况,是各种指标的综合结果。卡顿是指用户长时间得不到响应,体现在时长上。影响程序运行时长和体现cpu使用情况的两个重要CPU指标: cpu使用率cpu负载系统空闲时间

占用率

cpu 使用率可以通过top命令观察,按百分比显示,如下:

xxx@midcompser:~$ toptop - 12:17:03 up 223 days, 23:38, 28 users, load average: 0.44, 1.11, 4.11Tasks: 1349 total, 1 running, 1250 sleeping, 96 stopped, 2 zombie%Cpu(s): 1.1 us, 0.8 sy, 3.2 ni, 94.6 id, 0.4 wa, 0.0 hi, 0.0 si, 0.0 stKiB Mem: 13189618+total, 10773692+used, 24159264 free, 31246788 buffersKiB Swap: 12695296+total, 8214784 used, 11873817+free. 64272436 cached MemPID USERPR NI VIRT RES SHR S %CPU %MEMTIME+ COMMAND54267 xxx 20 0 26040 3804 2356 R 16.5 0.0 0:00.05 top 1 root20 0 33648 2336 1140 S 0.0 0.0 0:48.69 init 2 root20 0 000 S 0.0 0.0 0:06.13 kthreadd 3 root20 0 000 S 0.0 0.0 57:30.25 ksoftirqd/0 * top 可以显示每个进程的CPU占用,以及第三行中的id表示总体剩余cpu资源。

占用率的理解 cpu 使用率并不是大家想象中的瞬时使用率,是一定时间内cpu使用时间与总时间的百分比,例如:top每隔1s统计一次cpu使用率,那么cpu 使用率就是这1s内,cpu非空闲时间与总时间的比例。每个进程的CPU使用率也是通过该方法计算出来的,如果某个进程的cpu使用率低,也可能并不是因为该进程不怎么占用cpu,也可能是优先级不高,没分到多少运行时间。 进程一直在运行,为什么CPU还会有空闲时间 linux下cpu调度是以进程(线程是轻量级进程,在调度时进程和线程是一样的)为单位,每个cpu核都有一个进程执行队列,当正在运行和可运行队列为空时,cpu就空闲了,队列为空是因为进程做sleep操作或者阻塞操作导致状态变为不可运行。cpu使用率很少达到100%,实际上我们并没有充分使用cpu,这需要依靠系统配置和优秀的程序设计实现。

负载

查看

可通过top命令或者/proc/loadavg或者uptime命令来查看cpu负载信息,数据是一样的,如下:

* top 信息中的第三行Mem: 20656K used, 2676K free, 0K shrd, 5K buff, 882024K cachedCPU: 32.0% usr 28.0% sys 0.0% nic 40.0% idle 0.0% io 0.0% irq 0.0% sirqLoad average: 14.67 14.52 14.39 1/79 1203PID PPID USERSTAT VSZ %VSZ CPU %CPU COMMAND4591 rootS 48400207.3 0 32.0 cardv -o -N 1* cat /proc/loadavg14.48 14.50 14.40 1/80 1380* uptime21:01:20 up 1:15, 0 users, load average: 14.65, 14.54, 14.42

各项数据的含义:前三个数字是1、5、15分钟内的平均进程数,后面两个,第一个的分子是正在运行的进程数,分母是进程总数,另一个是最近运行的进程ID号。

负载理解

既然cpu使用率都没到100%,说明cpu还有空闲,为什么程序会卡顿?这就要说到负载。负载是指cpu核正在执行和可执行的进程队列中的进程数量与cpu核的最大可执行进程数的比例;例如:一个cpu核1s钟可以执行100个进程,如果这1s内,正在执行和等待执行的进程数量是120,负载就为1.2。如果运行的进程数量多了,也会导致cpu的使用率增长,因为出现cpu空闲的几率就小了。cpu使用率不高但是程序卡顿是因为,等待运行的进程数量过多,cpu负载较高,卡顿的进程需要等一段时间才能重新运行,等待时间长了,响应时间长了,给人的感觉就是卡顿了。

系统空闲时间

可通过/proc/uptime查看系统空闲时间,如下:

cat /proc/uptime 4666.15 1959.34

数据含义: 第一列表示系统启动到现在的时间(以秒为单位)第二列表示系统空闲的时间(以秒为单位) 注意:在多核CPU以及SMP系统里,系统空闲的时间有时会是系统运行时间的几倍,这是因为系统空闲时间是多个核心空闲时间的总值。指标作用:系统空闲时长类似于CPU占用率,区别是系统空闲时长是总体的累加数据,而CPU占用率是单位时间内的数据,体现了CPU是否被充分使用,系统空闲时长较长说明CPU未被充分利用或者任务较少。

现实情况

在现实场景中CPU的各种指标(例如:占用率和负载等)还和cpu核心的开启关闭以及cpu频率的降低增长有关,很多CPU都支持动态调节,在负载低的时候关闭cpu核以及降低cpu频率,例如联发科的CPU, 甚至会出现一核工作,7核围观的现象,因此衡量cpu的各种指标先要确认下CPU硬件资源。

查看cpu频率信息

某些CPU可以通过sys系统查看cpu频率信息,例如:gm8136s 平台上通过以下命令查看。

* 最大频率[root]# cat /sys/bus/cpu/devices/cpu0/cpufreq/cpuinfo_max_freq712* 当前频率[root]# cat /sys/bus/cpu/devices/cpu0/cpufreq/cpuinfo_cur_freq712

应用

性能监控 有些软件产品,会加上性能监控模块,来做些资源释放或者异常规避处理;例如:之前公司在嵌入式设备上实现了一个监控模块,CPU使用过高的情况下,自动重启设备,以避免糟糕的使用体验,恢复正常使用。注意:这里需要监控的是负载而不是占用率,因为占用率是过去,而负载是将来,过去的使用情况已经没有意义了,知道将来的cpu使用情况才能做一些规避和调整。 性能优化 程序性能问题导致体验不好。

性能优化个人经验

CPU占用率不高,但是负载超过合理值 说明CPU大部分时间都浪费在等待过程中,系统中存在过多的进程,CPU资源竞争激烈,并且大部分进程没有充分利用CPU,存在过多的等待操作(例如:延时sleep,等待io等),导致其它真正需要CPU资源的进程,得不到调度。 CPU占用率高,负载低 这才是理想状态。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。