【运维必备知识】Linux系统平均负载与top、uptime命令详解

秋意零 2024-6-8 405 6/8

【运维必备知识】Linux系统平均负载与top、uptime命令详解

大家好,我是秋意零

工作中,服务出现问题如何排查Linux系统侧。首先第一想到应该排查是否是负载过高导致的。

今天,这篇就来看看,top、uptime命令中平均负载(load average)相关内容,初学者应该关注都比较少(也包括我。。)

top命令介绍

top 实时显示系统运行状态

top命令的功能是实时显示系统运行状态,包含处理器、内存、服务、进程等重要资产信息。运维工程师们常常会把top命令比作“加强版的Windows任务管理器”,因为除了能看到常规的服务进程信息之外,还能够对处理器和内存的负载情况一目了然,实时感知系统全局的运行状态。

top命令常用的一些参数:

  1. -d <秒数> :设置top命令刷新显示的间隔时间,单位为秒。例如,top -d 10会让top每隔10秒更新一次显示。
  2. -b :以批处理模式运行top,这种模式下,top的输出会被设计为更适合被脚本或者其他程序处理,而不是交互使用。
  3. -n <次数> :指定top命令运行的次数后自动退出。例如,top -n 5会让top运行5次后结束。
  4. -p <进程ID>,<进程ID>,... :监控指定的进程ID列表。只显示指定的进程信息,这对于跟踪特定进程的资源使用情况非常有用。
  5. -u <用户名> :仅显示指定用户名的进程信息。这对于检查特定用户的系统活动很有帮助。
  6. -H:在进程信息中显示线程的详细信息,这使得你可以看到每个线程的资源使用情况。
  7. -i:不显示闲置(idle)或无用的进程,这可以让你的输出更加聚焦于活跃的进程。
  8. -c:显示完整的命令行而不截断,这样可以查看进程启动时的完整命令参数。
  9. -S:累计显示进程的CPU使用时间,这对于分析进程的历史CPU使用情况有帮助。

top命令交互式操作:

  1. P (Shift+P): 根据CPU使用率对进程列表进行排序,默认就是按此排序。
  2. M (Shift+M): 根据内存使用率对进程列表排序。
  3. H (Shift+H): 显示帮助信息,列出所有可用的交互命令。
  4. K (Shift+K): 杀死进程,选择此选项后,top会要求输入要终止的进程的PID。
  5. R (Shift+R): 改变进程的优先级(nice值),需要先选择进程,然后输入新的nice值。
  6. N (Shift+N): 依据不同的列对进程进行排序,重复按可以循环切换排序方式。
  7. q (q): 退出top命令。
  8. Space (空格键): 立即刷新显示,手动更新当前视图。
  9. 1 (1): 显示每个逻辑CPU的使用情况,适用于多核处理器。
  10. c (c): 切换显示命令行的显示,显示或隐藏完整的命令行。
  11. d (d): 设置更新间隔时间,输入数字后回车,单位为秒。
  12. W (Shift+W): 将当前top配置写入配置文件,以便下次启动时使用相同的设置。
  13. f (f): 进入字段管理模式,允许用户选择要在进程列表中显示哪些列。
  14. i (i): 切换是否显示闲置(Idle)和僵死(Zombie)的进程。
  15. o (o): 根据指定的字段排序进程列表,会提示选择排序的字段。
  16. 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性能:使用iostatiotop工具检查磁盘读写性能,判断是否存在I/O瓶颈。
  • 网络性能:通过netstatiftop查看网络流量和连接情况,判断是否存在网络瓶颈。

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)

参考

一分钟彻底搞清CPU使用率和工作负载(load average)的含义

Linux系统负载含义

CPU使用率过高问题排查及Linux之top命令用法详解

这篇文章有用吗?

点击星号为它评分!

平均评分 0 / 5. 投票数: 0

到目前为止还没有投票!成为第一位评论此文章。

很抱歉,这篇文章对您没有用!

让我们改善这篇文章!

告诉我们我们如何改善这篇文章?

- THE END -

秋意零

6月09日14:29

最后修改:2024年6月9日
0

非特殊说明,本博所有文章均为博主原创。

共有 0 条评论