cpu利用率和平均负载学习
转自:https://blog.csdn.net/gu_study/article/details/81942939
https://blog.csdn.net/Poo_Chai/article/details/80913671
1.CPU利用率
Utilization= work_time/total_time;
total_time=work_time+idle_ime;
指CPU工作时间占总时间的比重,总时间由一段连续时间内的CPU工作时间长度和CPU空闲时间长度组成。
在单处理器中,线程1,先工作10ms,线程2再工作30ms,之后CPU空闲60ms。则此100ms时间段内,CPU的利用率就是40%。
CPU利用率越低越好:
CPU在开同样程序的情况下,利用率越低说明CPU性能越好,处理能力越强,一般CPU利用率高的时候,系统将变得非常卡,甚至死机。
2.CPU平均负载(load average)
指某段时间内占用cpu时间的进程和等待cpu时间的进程数,这里等待cpu时间的进程是指等待被唤醒的进程,不包括处于wait状态进程(wait是主动进入等待状态)。
在Linux中,进程分为三种状态,一种是阻塞的进程blocked process(等待I/O设备的数据或者系统调),一种是可运行的进程runnable process,另外就是正在运行的进程running process。【怪怪的,那意思是wait状态也是阻塞的一种?】
进程可运行状态时,它处在一个运行队列run queue中,与其他可运行进程争夺CPU时间。 系统的load是指正在运行和准备好运行的进程的总数。比如现在系统有2个正在运行的进程,3个可运行进程,那么系统当前的load就是5。
2.1 多核CPU负载
在系统负荷方面,多核CPU与多CPU效果类似,所以考虑系统负荷的时候,必须考虑这台电脑有几个CPU、每个CPU有几个核心。然后,把系统负荷除以总的核心数,只要每个核心的负荷不超过1.0(即100%),就表明电脑正常运行。查看CPU逻辑核数命令:
cat /proc/cpuinfo |grep "processor"|wc -l
一般当系统负荷持续大于0.7,需要调查原因。例子:
#grep 'model name' /proc/cpuinfo | wc -l 24 #echo "0.7*24" |bc 16.8
多核CPU在计算平均负载时会除以核数。
3.top命令中cpu占用率是如何计算的?
转自:https://www.cnblogs.com/gatsby123/p/11127158.html,这篇博客非常牛,讲的很清楚。
%CPU -- CPU Usage The task's share of the elapsed CPU time since the last screen update, expressed as a percentage of total CPU time.
某个进程的CPU使用率就是这个进程在一段时间内占用的CPU时间占总的CPU时间的百分比。某个开启多线程的进程1s内占用了CPU0 0.6s, CPU1 0.9s, 那么它的占用率是150%。(总的cpu占用率是在每个cpu占用率之和:60%+90%=150%)
某进程cpu使用率 = 该进程cpu时间 / 总cpu时间。
文件/proc/pid/stat中可以得出进程自启动以来占用的cpu时间。