前言 做为一个性能测试工程师,每当我们发现计算机变慢的时候,我们通常的标准姿势就是执行 uptime 或 top 命令,来了解系统的负载情况 。
比如像下面这样,我在命令行里输入了 uptime 命令,系统会返回一行信息 。
appletekimbp:~ apple$ uptime20:44up 21 days,6:41, 2 users, load averages: 2.85 2.33 2.91
但我想问的是,各位同学知道以上每列输出的含义吗?
20:44# 当前时间up 21 days,6:41# 系统运行时间2 users# 正在登录用户数# 系统的平均负载,分别是1分钟、5分钟、15分钟内系统的平均负载load averages: 2.85 2.33 2.91
这行信息的后半部分,显示 “load average”,它的意思是”系统的平均载荷”,里面有三个数字,我们可以从中判断系统负载是大还是小 。
什么是系统平均负载? 我猜一定会有同学会说,平均负载不就是单位时间的 CPU 使用率吗?上面 2.85,就代表 CPU 使用率是 285% 。其实不是这样的 。
CPU 负载值在 Linux 系统中表示正在运行,处于可运行状态的平均作业数(读取一组与流程执行线程对应的机器语言的程序指令),或者非常重要,休眠但不可中断(不可交错的休眠状态)) 。也就是说,要计算 CPU 负载的值,只考虑正在运行或等待分配 CPU 时间的进程 。不考虑正常的休眠过程(休眠状态),僵尸或停止的过程 。简单来说,平均负载是指单位时间内,系统处于可运行状态和不可中断状态的平均进程数,也就是平均活跃进程数,它和 CPU 使用率并没有直接关系 。
进程状态代码 R 正在运行或可运行(在运行队列中) D 不间断休眠(通常为IO) S 可中断休眠(等待事件完成) Z 失效/僵尸,终止但未被其父 T 停止,由作业控制停止信号或因为它被追踪 […]这里先解释下,可运行状态和不可中断状态 。
可运行状态的进程,指的是正在使用CPU或者正在等待CPU的进程,也就是我们常用 ps 命令看到处于 R 状态(Running 或 Runnable)的进程 。
不可中断状态的进程,指的是正处于内核态关键流程中的进程,并且这些流程是不可打断的,比如常见是等待硬件设备的 I/O 响应 。也就是我们在Ps 命令看到的D状态(Uninterruptible Sleep,也称为 Disk Sleep)的进程 。比如,当一个进程向磁盘读写数据时,为了保证数据的一致性,在得到磁盘回复前,它是不能被其他进程或者中断打断的,这个时间的进程就处于不可中断状态 。如果此时的进程被打断,就容易出现磁盘数据与进程数据不一致的问题 。所以,不可中断状态实际上是系统对进程和硬件设备的一种保护机制 。因此,我们可以简单理解为,平均负载其实就是平均活跃进程数 。平均活跃进程数,直观上的理解就是单位时间内的活跃进程数 。既然平均的是是活跃进程数,那么理想的是,每个CPU上都刚好运行着一个进程,这样每个CPU都得到了充分利用 。
推荐阅读
- 同样是4000块,是买HTC Incredible S S710e G11还是摩托罗拉 Atrix 4G ME860 双核呢?求意见!
- hp6280 主板 Q65芯片组支持i5 2400 CPU吗?原来是i3双核的?
- 雌激素代谢基因CYP17和COMT单核苷酸多态与子宫内膜腺癌风险的关系
- 酷睿四核处理器i7 2630m 怎么样?
- 215ghz晓龙820四核能打王者荣耀吗 进来了解了解
- Intel 四核至强 E5506配什么主板
- 双核处理器和四核处理器的区别
- 中药单体原儿茶醛对瘀血证患者单核细胞趋化游走能力的影响
- 谷歌双核浏览器怎么设置视频小窗口播放按钮