【运维必备知识】Linux系统平均负载与top、uptime命令详解
大家好,我是秋意零
工作中,服务出现问题如何排查Linux系统侧。首先第一想到应该排查是否是负载过高导致的。
今天,这篇就来看看,top、uptime命令中平均负载(load average)相关内容,初学者应该关注都比较少(也包括我。。)
top命令介绍
top 实时显示系统运行状态
top命令的功能是实时显示系统运行状态,包含处理器、内存、服务、进程等重要资产信息。运维工程师们常常会把top命令比作“加强版的Windows任务管理器”,因为除了能看到常规的服务进程信息之外,还能够对处理器和内存的负载情况一目了然,实时感知系统全局的运行状态。
top
命令常用的一些参数:
-d <秒数>
:设置top
命令刷新显示的间隔时间,单位为秒。例如,top -d 10
会让top
每隔10秒更新一次显示。-b :以批处理模式运行 top
,这种模式下,top
的输出会被设计为更适合被脚本或者其他程序处理,而不是交互使用。-n <次数>
:指定top
命令运行的次数后自动退出。例如,top -n 5
会让top
运行5次后结束。-p <进程ID>,<进程ID>,...
:监控指定的进程ID列表。只显示指定的进程信息,这对于跟踪特定进程的资源使用情况非常有用。-u <用户名>
:仅显示指定用户名的进程信息。这对于检查特定用户的系统活动很有帮助。-H:在进程信息中显示线程的详细信息,这使得你可以看到每个线程的资源使用情况。 -i:不显示闲置(idle)或无用的进程,这可以让你的输出更加聚焦于活跃的进程。 -c:显示完整的命令行而不截断,这样可以查看进程启动时的完整命令参数。 -S:累计显示进程的CPU使用时间,这对于分析进程的历史CPU使用情况有帮助。
top
命令交互式操作:
P ( Shift
+P
): 根据CPU使用率对进程列表进行排序,默认就是按此排序。M ( Shift
+M
): 根据内存使用率对进程列表排序。H ( Shift
+H
): 显示帮助信息,列出所有可用的交互命令。K ( Shift
+K
): 杀死进程,选择此选项后,top
会要求输入要终止的进程的PID。R ( Shift
+R
): 改变进程的优先级(nice值),需要先选择进程,然后输入新的nice值。N ( Shift
+N
): 依据不同的列对进程进行排序,重复按可以循环切换排序方式。q ( q
): 退出top
命令。Space (空格键): 立即刷新显示,手动更新当前视图。 1 ( 1
): 显示每个逻辑CPU的使用情况,适用于多核处理器。c ( c
): 切换显示命令行的显示,显示或隐藏完整的命令行。d ( d
): 设置更新间隔时间,输入数字后回车,单位为秒。W ( Shift
+W
): 将当前top
配置写入配置文件,以便下次启动时使用相同的设置。f ( f
): 进入字段管理模式,允许用户选择要在进程列表中显示哪些列。i ( i
): 切换是否显示闲置(Idle)和僵死(Zombie)的进程。o ( o
): 根据指定的字段排序进程列表,会提示选择排序的字段。t ( t
): 切换是否显示进程和CPU状态信息的标题行。
top命令解析
$ top
top - 20:35:30 up 123 days, 6:28, 2 users, load average: 0.02, 0.01, 0.00
Tasks: 132 total, 1 running, 131 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.5 us, 0.3 sy, 0.0 ni, 99.0 id, 0.0 wa, 0.2 hi, 0.0 si, 0.0 st
MiB Mem : 1889.0 total, 265.7 free, 948.8 used, 674.5 buff/cache
MiB Swap: 0.0 total, 0.0 free, 0.0 used. 742.6 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
788 root 20 0 474984 19280 2008 S 0.3 1.0 284:35.41 tuned
744079 root 20 0 16992 5352 3752 S 0.3 0.3 0:00.26 sshd
745499 root 20 0 227200 4640 3988 R 0.3 0.2 0:00.01 top
注意:下列相关重要参数,都有标记重要二字
第一行:top - 20:35:30 up 123 days, 6:28, 2 users, load average: 0.02, 0.01, 0.00
参数 解释 时钟、系统运行时间:top - 20:35:30 up 123 days, 6:28 时钟: top - 20:35:30
表示当前时间是20小时35分钟30秒
系统运行时间:up 123 days, 6:28
意味着系统已经连续运行了123天6小时28分钟登录用户数:2 users 当前有2个用户登录 负载平均值(重要):load average: 0.02, 0.01, 0.00 分别是过去1分钟、5分钟和15分钟的系统负载平均值,数值都很低,表明系统目前很空闲
第二行:Tasks: 132 total, 1 running, 131 sleeping, 0 stopped, 0 zombie
参数 解释 任务总数:Tasks: 132 total 进程状态(重要):1 running, 131 sleeping, 0 stopped, 0 zombie 分别表示正在运行、休眠、停止和僵尸状态的进程数。
第三行:%Cpu(s): 0.5 us, 0.3 sy, 0.0 ni, 99.0 id, 0.0 wa, 0.2 hi, 0.0 si, 0.0 st
参数 解释 CPU使用率:%Cpu(s): 0.5 us, 0.3 sy, 0.0 ni, 99.0 id, 0.0 wa, 0.2 hi, 0.0 si, 0.0 st us
: 用户CPU时间百分比,表示用户态进程消耗的CPU时间sy
: 系统CPU时间百分比,表示内核态消耗的CPU时间ni
: nice值,调整过的用户CPU时间百分比id
: 空闲CPU时间百分比(重要)wa
: 等待I/O完成的CPU时间百分比hi
: 硬中断时间百分比si
: 软中断时间百分比st
: 被虚拟机偷走的CPU时间百分比(如果在虚拟化环境中)
第四行:MiB Mem : 1889.0 total, 265.7 free, 948.8 used, 674.5 buff/cache
参数 解释 总内存:1889.0 total 系统总内存为1889MB 可用内存:265.7 free 直接可用内存为265.7MB 已用内存:948.8 used 已分配给进程的内存948.8MB 缓冲/缓存内存:674.5 buff/cache 系统用于缓冲和缓存的内存674.5MB
第五行:不做解释,和第四行差不多
第六行:PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
参数 解释 PID 进程ID USER 运行该进程的用户 RP 优先级 NI nice值,影响进程调度的优先级 VIRT 虚拟内存大小,单位KB RES 常驻内存大小,即实际占用的物理内存大小,单位KB SHR 共享内存大小,单位KB S(重要) 进程状态 %CPU 该进程占用的CPU百分比 %MEM 该进程占用的物理内存百分比 TIME+ 进程运行的累积CPU时间。如:284:35.41,284分钟35.41秒 COMMAND(重要) 进程启动命令名称
进程状态
进程状态 | 解释 |
---|---|
R(running) | 正在运行或就绪状态。进程要么正在使用CPU,要么等待CPU分配时间片以继续执行。R+表示前台运行的进程。 |
S(sleeping) | 休眠状态。进程正在等待某个事件发生(如定时器、I/O完成、信号等),此时不会被分配CPU时间。 |
D(disk sleep) | 不同于S状态,特指进程正在等待I/O操作完成,尤其是磁盘I/O。在一些系统中,这可能与S状态一同显示为"DS"或"S+"。 |
T(stopped) | 停止状态。进程被暂停执行,通常是因为接收到SIGSTOP、SIGTSTP等信号。可以通过SIGCONT信号恢复运行。 |
t (tracing stop) | 跟踪停止状态。与T状态类似,但通常是因为被调试器(如gdb)所控制。 |
X(dead) | 死亡状态。进程即将被删除,这是一个非常短暂的状态,通常很快就会变为Z状态。 |
Z(zombie) | 僵尸状态。子进程已经终止,但父进程尚未通过wait() 或waitpid() 系统调用来收集其终止状态。僵尸进程不占用系统资源,除了少量内核表项。 |
详细进程相关内容可参考:【Linux】进程的七大状态详解!
相关指令(CPU、平均负载)
# 查看系统负载(或top命令)
[root@blog ~]# uptime
23:28:48 up 123 days, 9:22, 2 users, load average: 0.04, 0.05, 0.00
# 显示CPU架构信息,可看CPU核心数
[root@blog ~]# lscpu
Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
CPU(s): 2 # 核心数
On-line CPU(s) list: 0,1
...
...
# 查看CPU详细信息
[root@blog ~]# cat /proc/cpuinfo
相关面试题
1、如何判断top或者uptime命令中平均负载(load average)过高?
1)判断标准
可以通过对比系统的平均负载值和CPU核心数量来进行评估。如,如果系统有4个CPU核心,则每个核心对应1个负载单位。
平均负载值 < CPU核心数量:系统负载正常,CPU有足够的资源处理当前任务。例如,4核系统的平均负载值在0-2之间,表明系统负载较低。 平均负载值 ≈ CPU核心数量:系统负载较高,CPU资源接近饱和状态,但仍能处理当前任务。例如,4核系统的平均负载值在3-4之间,表明系统负载较高,但仍在可接受范围内。 平均负载值 > CPU核心数量:系统负载过高,CPU资源不足,大量任务在等待处理,可能导致系统性能下降。例如,4核系统的平均负载值超过4,特别是超过6或更高时,表明系统负载过高,CPU资源不足,大量任务在等待处理。 2)实际应用中的示例
低负载系统:一台4核服务器的负载值为 0.5, 0.7, 0.6
,表示系统负载较低,CPU有充足的资源应对任务。中等负载系统:一台4核服务器的负载值为 3.5, 3.8, 3.6
,表示系统负载较高,但仍在可接受范围内,CPU资源接近饱和。高负载系统:一台4核服务器的负载值为 6.0, 7.5, 8.0
,表示系统负载过高,大量任务在等待处理,可能导致系统响应变慢或出现性能问题。3)综合判断
有可能出现CPU使用率很低,但是负载却很高的情况,因为网络或者磁盘I/O很慢(传输工作负载),而CPU需要等待工作负载过来对其进行处理,导致CPU使用率很低。
PS:工作负载就是进程队列
所以除了平均负载值外,还应该结合其他性能指标来综合判断系统是否过载:
CPU使用率:查看各个核心的使用率,判断CPU是否处于高负载状态。 内存使用情况:通过 free
命令或其他工具检查内存和交换区的使用情况,判断是否有内存瓶颈。磁盘I/O性能:使用 iostat
或iotop
工具检查磁盘读写性能,判断是否存在I/O瓶颈。网络性能:通过 netstat
或iftop
查看网络流量和连接情况,判断是否存在网络瓶颈。
2、top 命令可以看到一个平均负载的指标,这个平均负载指的是什么
平均负载表示系统在特定时间段内(1分钟、5分钟、15分钟)运行队列中的进程数量的平均值。这包括正在运行的、等待运行的,以及等待某些资源(如I/O操作)完成的进程。
3、top 命令里这个平均负载,它跟CPU使用率有啥区别
区别:
平均负载是进程队列 CPU使用率是处理负载的繁忙程度 场景:有可能出现CPU使用率很低,但是负载却很高的情况。因为网络或者磁盘I/O很慢(传输工作负载),而CPU需要等待工作负载过来对其进行处理,导致CPU使用率很低。
4、top 命令中,进程的状态有,并说出英文缩写?
7种状态:运行状态 R(running)、休眠状态 S(sleeping)、等待磁盘I/O状态 D(disk sleep)、停止状态 T(stopped)、跟踪状态 t(tracing stop)、死亡状态 X(dead)、僵尸状态 Z(zombie)
参考
非特殊说明,本博所有文章均为博主原创。
如若转载,请注明出处:https://www.qiuyl.com/linux/250
共有 0 条评论