使用uptime命令检查Unix系统的负载状况

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个值分别是系统在过去1515分钟负载的平均值(这里的负载包含3种进程:当前正在被CPU执行的,一切条件就绪等待CPU调度的,和等待磁盘读取结果的)。衡量当前系统是否“过载”,需要把load averageCPU的数量结合起来考虑。如果load average的值是1,并且当前系统上只有一个CPU(需要注意,这里的CPU指一个“逻辑CPU”,即需要考虑物理CPU有多个core,每个core支持hyper-thread的情况),那么系统在过去的时间就是“满负荷”运转的。但是如果系统上有4CPU,那么系统就只有1 / 4 = 25%的时间是忙碌的,其余75%是空闲的。

Linux系统的uptime读取/proc/loadavg文件:

$ cat /proc/loadavg
12.97 11.53 11.33 12/3958 7094

前三项对应uptimeload average的输出。第四项中斜线前面的是活跃的kernel进程(线程)数,后面则是系统所有的kernel进程(线程)数。最后一项是系统最新产生的进程ID

对于OpenBSD来说,由于其没有/proc文件系统。它的uptime实现则是通过sysctl系统调用读取vm.loadavg的值。

uptime命令简介

uptime命令用来显示系统已经运行的时间:

# uptime
 19:05:33 up  3:16,  2 users,  load average: 0.00, 0.01, 0.05

19:05:33是当前系统时间,up 3:16是系统已经运行了3小时16分。后面还有用户和系统load信息。如果只关心系统运行了多次时间,可以使用下列命令:

# uptime -p
up 3 hours, 16 minutes

uptime命令得到系统运行时间是通过读取/proc/uptime文件:

# cat /proc/uptime
11984.78 95454.77

第一个字段是系统启动的秒数,第二个字段是系统每个CPU core处在idle状态的时间总和。