常用的命令可以帮助快速查看 Linux 服务器CPU/内存/磁盘/网络的各项指标

CPU/内存资源

top

top - 13:43:47 up 19 days, 22:59,  1 user,  load average: 0.05, 0.08, 0.09
Tasks: 15121 total,   1 running, 104 sleeping,   0 stopped, 15016 zombie
%Cpu(s):  1.6 us,  2.4 sy,  0.0 ni, 95.9 id,  0.2 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :  2046504 total,   248612 free,   939596 used,   858296 buff/cache
KiB Swap:        0 total,        0 free,        0 used.   909192 avail Mem 

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND                                                                
 4891 dayday    20   0  179960  18024   1624 R   5.6  0.9   0:00.97 top                                                                    
 2500 root      20   0  759504  46952   2664 S   1.3  2.3 478:01.62 barad_agent                                                            
27002 root      20   0  993712  64148  12752 S   0.9  3.1  55:01.65 YDService                                                              
 3761 root      20   0 1385852  24392   8948 S   0.3  1.2  66:33.10 home-service
  • load average: 0.05, 0.08, 0.09: 系统负载(1m/5m/15m)。负载值表示的是系统的平均进程数,即在特定时间段内处于可运行状态或等待 CPU 时间的进程数。
    • 0.05:表示在过去的1分钟内,平均有 0.05 个进程在等待 CPU 时间或处于可运行状态。
    • 0.08:表示在过去的5分钟内,平均有 0.08 个进程在等待 CPU 时间或处于可运行状态。
    • 负载值的水平:负载值的高低取决于你的系统有多少个 CPU 核心(或虚拟 CPU)。
      • 负载值为N(N为核心数)表示系统已经完全占用。例如,4核系统的负载值为4表示完全占用。
      • 负载值高于N表示系统超载,有进程在等待 CPU 时间。
      • 负载值低于N表示系统有空余的 CPU 资源。
  • Tasks: 15121 total, 1 running, 104 sleeping, 0 stopped, 15016 zombie: 总任务数, 正在运行/睡眠/暂停/僵尸
  • %Cpu(s): 1.6 us, 2.4 sy, 0.0 ni, 95.9 id, 0.2 wa, 0.0 hi, 0.0 si, 0.0 st: 各种类型的 CPU 使用率
    • us(User CPU time): 用户空间程序使用的 CPU 时间百分比,不包括 nice 修改过优先级的进程。这里的 1.6 us 表示 1.6% 的 CPU 时间被用户态进程所使用。
    • sy(System CPU time): 内核空间使用的 CPU 时间百分比,这部分时间用于系统内核执行任务。这里的 2.4 sy 表示 2.4% 的 CPU 时间被系统内核所使用。
    • ni(Nice CPU time): 被 nice 调整过优先级的用户进程使用的 CPU 时间百分比。
    • id(Idle CPU time): 空闲的 CPU 时间百分比。这里的 95.9 id 表示 95.9% 的 CPU 时间是空闲的,没有被使用。
    • wa(I/O wait CPU time): 等待 I/O 操作完成的 CPU 时间百分比。这里的 0.2 wa 表示 0.2% 的 CPU 时间用于等待 I/O 操作。
    • hi(Hardware IRQ CPU time): 处理硬件中断的 CPU 时间百分比。
    • si(Software IRQ CPU time): 处理软件中断的 CPU 时间百分比。
    • st(Steal time): 虚拟化环境中,虚拟 CPU 被其他虚拟机占用的时间百分比。
  • KiB Mem : 2046504 total, 248612 free, 939596 used, 858296 buff/cache: 系统内存的详细使用情况
    • total: 系统的总内存大小(KB)。
    • free: 当前未被使用的空闲内存(KB)。
    • used: 当前正在被使用的内存(KB)。
    • buff/cache: 用于缓冲和缓存的内存(KB)。
  • KiB Swap: 0 total, 0 free, 0 used. 909192 avail Mem: 提供了系统交换空间(swap)的详细使用情况。
    • total: 系统的总交换空间大小(KB)。
    • free: 当前未被使用的空闲交换空间(KB)。
    • used: 当前正在被使用的交换空间(KB)。
    • avail Mem: 可用的物理内存(约 909MB)。
  • 每个进程的详细信息按列显示
    • PID(Process ID):进程的唯一标识符。
    • USER:启动进程的用户名称。
    • PR(Priority):进程的优先级。
    • NI(Nice value):进程的 Nice 值,表示进程的优先级调整值。负值表示高优先级,正值表示低优先级。
    • VIRT(Virtual Memory):进程占用的虚拟内存总量(包括代码、数据、共享库、以及未使用的内存)。
    • RES(Resident Memory):进程实际使用的物理内存量,不包括交换空间。
    • SHR(Shared Memory):进程使用的共享内存量。
    • S(State):进程的状态,常见的状态包括
      • R:运行(Running)
      • S:休眠(Sleeping)
      • D:不可中断的休眠(Uninterruptible Sleep)
      • T:停止(Stopped)
      • Z:僵尸进程(Zombie)
    • %CPU:进程使用的 CPU 时间百分比。
    • %MEM:进程使用的物理内存百分比。
    • TIME+:进程使用的总 CPU 时间(格式为 H:M:S)。
    • COMMAND:启动进程的命令名称或路径。
交互命令 描述
1 切换显示每个 CPU 的信息。
m 切换显示内存信息。可以将内存使用率转换成柱状图
P 按CPU使用率排序。
M 按内存使用率排序。
t 切换显示任务和 CPU 状态信息。可以将CPU使用率转换成柱状图
T 按运行时间排序。
h/? 显示帮助信息。
H 切换线程视图。当线程视图开启时,top 会显示每个进程的独立线程,并且每个线程会有自己的 PID(线程 ID,通常显示为 TID)。
c 切换显示完整的命令行。
V 切换显示线程视图。
b 切换高亮显示当前运行的任务。
z 切换颜色/高亮显示。
r 调整进程的优先级(renice)。系统会提示你输入要调整的进程 ID 和新的 nice 值。
R 可以反转当前的排序顺序。
o 可以添加或修改过滤条件,以便只显示符合特定条件的进程。比如 %MEM>5
z 切换颜色/高亮显示。

vmstat

# 1s 显示一次, 第一行是系统启动以来的统计信息, 一般可以忽略不看, 从第二行开始看起
$ vmstat -w 1
--procs-- -----------------------memory---------------------- ---swap-- -----io---- -system-- ----------cpu----------
   r    b         swpd         free         buff        cache   si   so    bi    bo   in   cs  us  sy  id  wa  st  gu
   0    0           12       220512        83320      1104072    0    0     5    76  771    6   1   1  98   0   0   0
   0    0           12       220512        83328      1104076    0    0     0   348  844 1437   1   1  98   1   0   0
   0    0           12       220512        83328      1104080    0    0     0     0  762 1271   1   1  99   0   0   0
   1    0           12       220512        83328      1104084    0    0     0     0  672 1285   1   1  99   0   0   0
   0    0           12       220512        83328      1104084    0    0     0     0  783 1374   1   1  98   0   0   0
   2    0           12       220512        83328      1104084    0    0     0     0  937 1550   1   3  96   0   0   0
   2    0           12       220512        83328      1104084    0    0     0    64  722 1282   1   1  99   0   0   0
   2    0           12       220512        83328      1104088    0    0     0    88 1556 2941   1   1  98   0   0   0
   3    0           12       220512        83328      1104088    0    0     0     0  722 1282   1   1  99   0   0   0
   0    0           12       220512        83328      1104088    0    0     0     0  765 1310   1   1  99   0   0   0
   3    0           12       220512        83328      1104088    0    0     0     0  643 1150   1   1  99   0   0   0
   4    0           12       220512        83336      1104092    0    0     0   312  948 1564   1   4  95   1   0   0
  • proc:进程信息
    • r:运行队列中的进程数量。即有多少线程等待操作系统调度运行,这可看作是 CPU 的饱和度指标,长时间处于高值一般有问题。
    • b:等待资源的进程数量。不可中断阻塞的线程数量,一般就是阻塞于 io 访问的线程数量。
  • memory:内存信息。
    • swpd:已使用的交换空间(单位:KB)。
    • free:空闲内存(单位:KB)。
    • buff:用于缓冲的内存(单位:KB)。
    • cache:用于缓存的内存(单位:KB)。
  • swap:交换信息。
    • si:从交换区交换到内存的量(单位:KB/s)。
    • so:从内存交换到交换区的量(单位:KB/s)。
  • io:I/O 信息。
    • bi:从块设备读取的数据块数(单位:块/s)。
    • bo:写入到块设备的数据块数(单位:块/s)。
  • system:系统信息。
    • in:每秒中断次数,包括时钟中断。
    • cs:每秒上下文切换次数。
  • cpu:CPU 信息(所有值的总和为 100%)。
    • us:用户态 CPU 时间(百分比)。
    • sy:内核态 CPU 时间(百分比)。
    • id:空闲时间(百分比)。
    • wa:等待 I/O 的时间(百分比)。
    • st:被虚拟机偷去的时间(百分比)。

free

# 查看内存使用情况, -m 以 MB 为单位, -g 以 GB 为单位
$ free -m
               total        used        free      shared  buff/cache   available
Mem:            1711         533         211           2        1161        1178
Swap:           1987           0        1987

slabtop

$ sudo slabtop

 Active / Total Objects (% used)    : 595593 / 690572 (86.2%)
 Active / Total Slabs (% used)      : 21018 / 21018 (100.0%)
 Active / Total Caches (% used)     : 325 / 381 (85.3%)
 Active / Total Size (% used)       : 138645.74K / 156474.95K (88.6%)
 Minimum / Average / Maximum Object : 0.01K / 0.23K / 10.19K

  OBJS ACTIVE  USE OBJ SIZE  SLABS OBJ/SLAB CACHE SIZE NAME                   
189501 174819  92%    0.10K   4859       39     19436K buffer_head
 69700  60335  86%    0.05K    820       85      3280K shared_policy_node
 67014  41018  61%    0.04K    657      102      2628K extent_status
 61950  45594  73%    0.19K   2950       21     11800K dentry
 52364  45565  87%    1.16K   4028       13     64448K ext4_inode_cache
 35968  25533  70%    0.06K    562       64      2248K dmaengine-unmap-2
 34692  34688  99%    0.14K   1239       28      4956K kernfs_node_cache
 14714  12603  85%    0.57K   1051       14      8408K radix_tree_node
  8100   8061  99%    0.62K    675       12      5400K inode_cache
  7038   5900  83%    0.04K     69      102       276K vma_lock
  6657   6122  91%    0.19K    317       21      1268K cred_jar
  6176   5527  89%    0.12K    193       32       772K kmalloc-rnd-06-128
  6048   5773  95%    0.07K    108       56       432K vmap_area
  • Active / Total Objects (% used):活动对象的数量和总对象的数量,以及使用的百分比。
  • Active / Total Slabs (% used):活动 slab 的数量和总 slab 的数量,以及使用的百分比。
  • Active / Total Caches (% used):活动缓存的数量和总缓存的数量,以及使用的百分比。
  • Active / Total Size (% used):活动对象的大小和总对象的大小,以及使用的百分比。
  • Minimum / Average / Maximum Object:对象的最小、平均和最大大小。

pidstat

用于监控和报告 Linux 系统上各个进程资源使用情况的工具。它属于 sysstat 包中的一部分,可以提供 CPU、内存、I/O 等资源的详细统计信息。

常用选项

以下是一些常用的 pidstat 选项:

  • -u:报告每个进程的 CPU 使用情况。

  • -r:报告每个进程的内存使用情况。

  • -d:报告每个进程的 I/O 使用情况。

  • -p <pid>:仅报告指定进程的统计信息。如果不指定 -p 选项,默认报告所有进程的信息。

  • -t:同时报告每个进程及其线程的信息。

  • -h:不显示标题行(适用于脚本中使用)。

  • -s:显示每个进程的堆栈大小信息。

  • available: 系统真正的可用内存, 约等于 free+buff/cache, 因为 buff/cache 也是可以被回收使用的内存

磁盘资源

df

iostat

iotop

网路资源

nicstat

# -z 选项用于在输出中包含零流量的接口。
$ nicstat -z
    Time      Int   rKB/s   wKB/s   rPk/s   wPk/s    rAvs    wAvs %Util    Sat
16:29:31       lo    0.04    0.04    0.39    0.39   101.0   101.0  0.00   0.00
16:29:31     eth0    4.27    2.09    8.65    6.83   505.0   313.8  0.00   0.00
16:29:31 br-8ae9e134567b    0.35    0.03    0.26    0.26  1398.0   104.0  0.00   0.00
16:29:31 veth167b779    0.36    0.03    0.26    0.26  1412.0   103.9  0.00   0.00
16:29:31 br-bdf84a9d0c5e    1.29    1.22    1.80    2.06   737.6   605.5  0.00   0.00
16:29:31 vethd7a4f79    1.32    1.22    1.80    2.06   751.6   605.4  0.00   0.00
  • Time:时间戳,表示数据采样的时间。
  • Int:网络接口名称,例如 eth0、eth1。
  • rKB/s:接收数据的速率(单位:KB/s)。
  • wKB/s:发送数据的速率(单位:KB/s)。
  • rPk/s:接收数据包的速率(单位:包/s)。
  • wPk/s:发送数据包的速率(单位:包/s)。
  • rAvs:接收数据包的平均大小(单位:字节)。
  • wAvs:发送数据包的平均大小(单位:字节)。
  • %Util:接口利用率(百分比)。
  • Sat:饱和度(百分比)。

iftop

可以查看各个网络连接当前的网速

# -B:以字节(Bytes)为单位显示带宽使用情况,而不是以位(Bits)。
# -n:不解析主机名,直接显示 IP 地址,这样可以减少 DNS 查询,提高显示速度。
# -N:不解析端口号,直接显示端口号,而不是服务名称。
# -P:显示端口号信息,这样可以看到具体的端口活动情况。
$ sudo iftop -B -nNP

全能观测工具

sar

dstat