命令介绍uptime会一行显示如下信息:当前时间系统运行了多长时间?说起来很好理解,那么系统的负载是多少。系统平均负载(LoadAverage)是指一段时间内CPU正在处理和等待CPU处理的进程数总和的统计信息,即进程长度的统计信息CPU使用队列。处于可运行(R状态)或不可中断状态(D状态)的平均进程数。可运行进程正在使用CPU或正在等待使用CPU。一个处于不可中断状态的进程正在等待一些I/O访问,比如等待磁盘IO。负载反映了系统的繁忙程度或饱和度。对于1核的cup,如果负载为1(虽然核数和CPU数略有不同,但说到负载,还是按照核数计算的,下面是1核的例子),可以简单理解为系统饱和,没有剩余资源。通常可接受的值为0.7,在0.7和1之间是一个好的状态,小于0.7表示CPU比较空闲,大于1表示系统已经饱和。但是如果大于1,肯定有问题。还要根据实际情况具体分析。大于1时是什么情况?站台候车的人不可能全部上车(load>1),但随着时间的推移,高峰期逐渐过去后,每次候车的人都能上车(load<1)。在等待的人群中,有些人很可能是因为其他原因,比如等待还没进站的朋友,不会马上上地铁(I/O、网络等因素),但是这些人也计入负载。因此,负载不一定能全面反映系统状态,需要结合其他指标进行分析。等的人多,系统不一定出问题。只有当等待人数超过一定数量,比如不断增加,超出平台的承载能力时,才会真正出现问题;通常,如果负载长期保持在0.7以上,管理员应该保持警惕。如果长期超过1,应立即分析(例如:很可能扩大)。进程状态为了代码更容易阅读,先介绍一下Linux上进程的五种状态:1.R——Runnable(运行):正在运行或在运行队列中等待2.S——休眠(中断)):sleepIn,blocked,waitingforformingofcertainconditionorreceivingasignal3.D——不可中断的睡眠(uninterruptible):收到信号不唤醒不能运行,进程必须等到中断发生4.Z——僵尸(Zombie):进程已经终止,但进程描述还在,直到父进程调用wait4()系统调用释放5.T——traced或stoppd(停止):进程停止接收到SiGSTOP、SIGSTP、SIGTOU信号后运行后缀代表:<:高优先级进程N:低优先级进程L:部分页面被锁入内存s:进程的领导者(下有子进程)l:ismulti-threaded(使用CLONE_THREAD,就像NPTLpthreads一样)+:位于后台的进程组的源代码。找到centos对应的源码包并下载源码包,打开uptime.c,主要入口在这里1)系统运行时主要涉及的源文件:uptime.csysinfo.c。通过sysinfo.c中的uptime函数获取当前时间。使用宏FILE_TO_BUF读取系统/proc/uptime的时间,通过一系列的转换得到需要的时间。这里可以看出时间是通过/proc/uptime获取的,“一切皆文件”。介绍一下/proc下的魔法,先调用超人(manproc),看详细介绍,再看这个文件2)登录用户涉及的主要源文件:uptime.cwhattime.csysinfo.c使用getutent()获取登录用户信息并计算数量。etutent在glibc包中。默认文件定义在glibc头文件sysdeps/generic/paths.h/var/run/utmp中,是一个二进制文件,记录了当前登录系统的用户信息。who命令可用于显示内容。相关函数:getutent、getutid、getutline、setutent、endutent、pututline、utmpname头文件:#include
