接前一篇文章:Linux性能优化工具系列详解(1)
本系列内容参考:
极客时间 —— 倪朋飞 《Linux 性能优化实战》
特此致谢!
系列工具
1. uptime
上一回结合man介绍了uptime命令,本回结合实际命令结果,对于uptime进行进一步对照讲解。
(3)实际命令结果分析
在笔者电脑虚拟机上执行uptime命令,实际命令及结果如下:
$ uptime 11:07:53 up 30 min, 1 user, load average: 1.00, 1.05, 0.90对照上一回的命令说明来看:
uptime提供以下信息的单行显示:当前时间、系统运行时间、当前登录用户数以及过去1、5和15分钟的系统负载平均值。
上边uptime命令执行结果中:
- 11:07:53:当前时间(指令执行时的时间);
- up 30 min:系统运行时间。也就是系统自最近一次启动以来,已经运行了30分钟了;
- 1 user:当前有1个用户登录。
- load average: 1.00, 1.05, 0.90:过去1分钟、5分钟、15分钟的平均负载。
什么是平均负载呢?
上一回给出的官方文档中已经讲得比较清楚了:
系统负载平均值是处于可运行或不可中断状态的进程的平均数量。
处于可运行状态的进程要么正在使用CPU,要么正在等待使用CPU;处于不可中断状态的进程正在等待某些I/O访问,例如等待磁盘。在三个(种)时间间隔内取平均值。
负载平均值不是针对系统中的CPU数量进行归一化的,因此负载平均值为1意味着单CPU系统一直在加载,而在4 CPU系统上,这意味着它有75%的时间处于空闲状态。
说得再直白一些,平均负载是指单位时间内,系统处于可运行状态和不可中断状态的平均进程数,也就是平均活跃进程数。所谓可运行状态,是指进程正在使用CPU或者正在等待CPU,也就是平常使用ps命令看到的,处于R状态(Running或Runnable)的进程;而不可中断的状态,则是指进程正处于内核态关键流程,并且这些流程是不可打断的。也就是用ps命令看到的,处于D状态(Uninterruptible Sleep,也称Disk Sleep)的进程。
平均活跃进程数,简单理解就是单位时间内的活跃进程数(当然实际上是指活跃进程数的指数平均值)。既然是平均的是活跃进程数,那么最理想地,是每个CPU上都刚好有一个进程在运行,这代表了每个CPU都得到了充分利用,既不繁重、也不浪费。官方文档中给了一个例子,在这里展开讲一下:
假设当前系统的平均负载(负载平均值)为2,那么就意味着,在(单核)单CPU系统上,有一半的进程竞争不到CPU;在双CPU系统上,所有的CPU都刚好被完全占用;而在4 CPU系统上,则意味着CPU有50%的时间处于空闲状态。
再执行两次uptime命令,结果如下:
$ uptime 11:13:18 up 35 min, 1 user, load average: 1.01, 1.02, 0.94$ uptime 11:13:22 up 36 min, 1 user, load average: 1.01, 1.02, 0.94根据这3次的平均负载结果,可以看到load average分别是1.00, 1.05, 0.90、1.01, 1.02, 0.94、1.01, 1.02, 0.94。这就说明以下几点:
1)三次结果中每一次的1分钟、5分钟、15分钟的3个负载平均值相差不大,说明负载比较平稳。最近有略微增长的趋势;
2)三次结果的1分钟、5分钟、15分钟的3个负载平均值横向比较也相差不大,也说明负载相对平稳。
(4)命令选项实际效果
根据上一回的官方文档,uptime命令包括以下选项:
选项
- -p, --pretty:以漂亮的格式显示正常运行时间。
- -h, --help:显示此帮助文本。
- -s, --since:以yyyy-mm-dd HH:mm:SS格式显示系统已运行时间。
- -V, --version:显示版本信息并退出。
下边对于各选项进行实际测试并给出结果。
1)-h, --help
实际命令及结果如下:
$ uptime -h Usage: uptime [options] Options: -p, --pretty show uptime in pretty format -h, --help display this help and exit -s, --since system up since -V, --version output version information and exit For more details see uptime(1).2)-V, --version
实际命令及结果如下:
$ uptime -V uptime from procps-ng 3.3.173)-p, --pretty
实际命令及结果如下:
$ uptime 21:44:32 up 2:03, 1 user, load average: 1.00, 1.01, 1.09 $ uptime -p up 2 hours, 3 minutes4)-s, --since
实际命令及结果如下:
$ uptime -s 2026-08-08 19:41:24(4)平均负载与CPU使用率的区别
实际工作中,经常会把平均负载和CPU使用率混淆。其实这两者并不是一回事。
平均负载是指单位时间内,处于可运行状态和不可中断状态的进程数。它不仅包括了正在使用CPU的进程,还包括了等待CPU和等待I/O的进程。
而CPU使用率,则是对单位时间内CPU繁忙情况的统计,与平均负载并不一定完全对应。
- CPU密集型进程,使用大量CPU会导致平均负载升高。这种情况下,平均负载与CPU使用率二者是一致的;
- 大量等待CPU的进程调度也会导致平均负载升高,此时CPU使用率也会比较高,二者也趋于一致;
- I/O密集型进程,等待I/O也会导致平均负载升高,但这种情况下,CPU使用率不一定很高。二者就并不一致了。
至此,性能优化的第1个命令 —— uptime就讲完了。当然,后边讲其它命令以及系统整体优化的时候还会遇到,到时候再来回顾并进一步掌握此命令。
更多内容请看下回。