Unix
系统的uptime
命令可以用来检查系统的负载状况。以Linux
为例:
$ uptime
01:32:50 up 40 days, 3:09, 56 users, load average: 11.72, 11.67, 11.51
load average
后面的3
个值分别是系统在过去1
,5
和15
分钟负载的平均值(这里的负载包含3
种进程:当前正在被CPU
执行的,一切条件就绪等待CPU
调度的,和等待磁盘读取结果的)。衡量当前系统是否“过载”,需要把load average
同CPU
的数量结合起来考虑。如果load average
的值是1
,并且当前系统上只有一个CPU
(需要注意,这里的CPU
指一个“逻辑CPU
”,即需要考虑物理CPU
有多个core
,每个core
支持hyper-thread
的情况),那么系统在过去的时间就是“满负荷”运转的。但是如果系统上有4
个CPU
,那么系统就只有1 / 4 = 25%
的时间是忙碌的,其余75%
是空闲的。
Linux
系统的uptime
读取/proc/loadavg
文件:
$ cat /proc/loadavg
12.97 11.53 11.33 12/3958 7094
前三项对应uptime
中load average
的输出。第四项中斜线前面的是活跃的kernel
进程(线程)数,后面则是系统所有的kernel
进程(线程)数。最后一项是系统最新产生的进程ID
。
对于OpenBSD
来说,由于其没有/proc
文件系统。它的uptime
实现则是通过sysctl
系统调用读取vm.loadavg
的值。