常用的命令可以帮助快速查看 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