在 Linux 系统中,top 命令是一个实时监控系统性能和查看进程状态的重要工具,它可以动态地显示系统中各进程的资源占用情况,包括 CPU、内存等。top 命令的输出界面包含丰富的信息,能够帮助用户了解当前系统的负载和进程的运行状况。

一、`top` 命令输出内容

1.1 启动 `top` 命令

在终端中输入以下命令来启动 top

top

执行命令进入top界面:

  • 大写 E:切换 top 界面顶部的系统总内存交换分区的单位(KiBMiBGiB 等)。
  • 小写 e:切换进程列表中(VIRTRESSHR 等列)的内存单位。

结果:

top - 19:31:40 up 776 days,  6:43,  2 users,  load average: 0.21, 0.21, 0.25
Tasks: 492 total,   1 running, 491 sleeping,   0 stopped,   0 zombie
%Cpu(s):  2.0 us,  1.2 sy,  0.0 ni, 96.7 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
GiB Mem :     31.3 total,      0.8 free,     26.4 used,      4.1 buff/cache
GiB Swap:      7.9 total,      5.5 free,      2.4 used.      4.0 avail Mem 

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND                                                                                 
 3492 gdm       20   0    0.9g   0.2g   0.0g S   4.7  0.7  27863:20 gsd-color                                                                               
22788 root      20   0    6.1g   0.7g   0.0g S   2.0  2.1   1927:43 java                                                                                    
23134 root      20   0    6.7g   0.9g   0.0g S   2.0  3.0   7:35.63 java                                                                                    
11961 root      20   0    6.7g   0.8g   0.0g S   1.7  2.5   7:19.22 java        

1.2 `top` 输出界面的说明

第一行:系统负载和运行时间
top - 19:31:40 up 776 days,  6:43,  2 users,  load average: 0.21, 0.21, 0.25
  • 19:31:40:当前系统时间。
  • up 776 days, 6:43:系统已经运行了 776 天 6小时 43 分钟。
  • 2 users:当前登录到系统的用户数。
  • load average: 0.21, 0.21, 0.25:系统的平均负载,分别是最近 1 分钟、5 分钟和 15 分钟的平均负载。负载平均值 ≤ CPU 核心数:系统运行良好,没有 CPU 资源瓶颈;负载平均值 > CPU 核心数:系统开始变得繁忙,可能会出现 CPU 资源不足的情况
第二行:任务(进程)状态
Tasks: 492 total,   1 running, 491 sleeping,   0 stopped,   0 zombie
  • 492 total:进程总数。
  • 1 running:当前正在运行的进程数。
  • 491 sleeping:正在休眠的进程数。
  • 0 stopped:停止的进程数。
  • 0 zombie:僵尸进程数(已经终止但未被父进程回收的进程)。
第三行:CPU 使用情况
%Cpu(s):  2.0 us,  1.2 sy,  0.0 ni, 96.7 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
  • us (user):用户空间的 CPU 使用率。
  • sy (system):内核空间的 CPU 使用率。
  • ni (nice):改变优先级的进程所使用的 CPU 时间。
  • id (idle):CPU 空闲百分比。
  • wa (wait):等待 I/O 操作的 CPU 时间。
  • hi (hardware interrupts):硬件中断占用的 CPU 时间。
  • si (software interrupts):软件中断占用的 CPU 时间。
  • st (steal time):虚拟化环境中,其他虚拟机占用的 CPU 时间。
第四行:内存使用情况
GiB Mem :     31.3 total,      0.8 free,     26.4 used,      4.1 buff/cache
  • 31.3 total:总的物理内存大小(GB)。
  • 0.8 free:空闲的物理内存大小。
  • 26.4 used:已使用的物理内存大小。
  • 4.1 buff/cache:被缓冲和缓存占用的内存。
第五行:交换分区使用情况
GiB Swap:      7.9 total,      5.5 free,      2.4 used.      4.0 avail Mem 
  • 7.9 total:交换分区的总大小。
  • 5.5 free:空闲的交换空间大小。
  • 2.4 used:已使用的交换空间大小。
  • 4.0 avail Mem:可供新进程使用的内存大小。
进程列表
  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND                                                                                 
 3492 gdm       20   0    0.9g   0.2g   0.0g S   4.7  0.7  27863:20 gsd-color                                                                               
22788 root      20   0    6.1g   0.7g   0.0g S   2.0  2.1   1927:43 java                                                                                    
23134 root      20   0    6.7g   0.9g   0.0g S   2.0  3.0   7:35.63 java                                                                                    
11961 root      20   0    6.7g   0.8g   0.0g S   1.7  2.5   7:19.22 java 
  • PID:进程 ID。
  • USER:启动进程的用户。
  • PR:进程优先级。
  • NI:进程的 nice 值,影响调度优先级。
  • VIRT:进程占用的虚拟内存大小。
  • RES:进程占用的物理内存大小。
  • SHR:进程使用的共享内存大小。
  • S:进程状态,其中:
    • R:运行中。
    • S:休眠中。
    • D:不可中断的睡眠状态。
    • Z:僵尸进程。
    • T:已停止。
  • %CPU:进程使用的 CPU 百分比。
  • %MEM:进程使用的内存百分比。
  • TIME+:进程运行的总时间。
  • COMMAND:启动进程的命令名称或路径。

二、`top` 命令的交互操作

top 命令的强大之处在于其交互操作功能。可以在 top 运行期间直接使用键盘命令来调整显示内容或管理系统进程。

常用交互命令

  • h:显示帮助。
  • q:退出 top
  • k:终止指定进程,提示输入进程 PID。
  • r:调整进程的优先级,提示输入 PID 和新的 nice 值。
  • P:按 CPU 使用率排序(默认)。
  • M:按内存使用率排序。
  • N:按 PID 排序。
  • T:按运行时间排序。
  • 1:显示所有 CPU 核心的使用情况(适用于多核 CPU)。

三、`top` 命令的命令行选项

除了交互操作,top 还可以通过命令行选项自定义行为。例如:

3.1 指定刷新间隔时间

top -d 2
  • 每 2 秒刷新一次。

3.2 只显示特定进程

top -p 3492
  • 只监控 PID 为 3492 的进程。

3.3 设置刷新次数后自动退出

top -n 5
  • 刷新 5 次后退出。

3.4 以批处理模式运行

top -b -n 1 > top_output.txt
  • 以批处理模式运行,并将输出重定向到文件 top_output.txt 中。

四、Linux 系统中的 CPU 监控命令

除了 top 命令,Linux 系统中还有其他一些常用的 CPU 管理和监控工具。以下是一些常用的命令:

4.1 `htop` 命令

htoptop 命令的增强版,提供了更友好的界面和交互功能。

htop
  • 需要先安装:yum install htop
  • 支持用颜色区分 CPU、内存使用情况,并且通过上下键可以快速选择和管理进程。

4.2 `mpstat` 命令

mpstatsysstat 工具包中的命令,显示每个 CPU 核心的使用情况。

mpstat -P ALL
  • 显示所有 CPU 核心的详细使用情况。
  • 安装:yum install sysstat

4.3 `sar` 命令

sar 也是 sysstat 工具包中的一部分,用于收集和报告系统的 CPU 使用情况。

sar -u 1 3
  • 1:每秒刷新一次。
  • 3:显示三次后停止。

4.4 `taskset` 命令

taskset 用于设置或查看进程的 CPU 亲和性。

taskset -c 0,2 my_program
  • 将进程 my_program 绑定到 CPU 0 和 CPU 2。
  • 查看某个进程的 CPU 亲和性:
# 显示结果是16进制
taskset -p <PID>

4.5 `nice` 和 `renice` 命令

这两个命令用于调整进程的优先级,影响进程获取 CPU 资源的优先程度。

  • nice:启动进程时设定其优先级。
nice -n 10 my_program

-n 10 表示将进程的 nice 值设为 10。

  • renice:调整正在运行的进程的优先级。
renice 5 -p 3492

4.6 `cpulimit` 命令

cpulimit 用于限制某个进程的 CPU 使用率。

cpulimit -l 50 -p 3492
  • 限制 PID 为 3492 的进程最多使用 50% 的 CPU。
  • 需要手动安装:yum install cpulimit

4.7 `lscpu` 命令

lscpu 显示 CPU 的架构信息,包括核心数、线程数、CPU 频率等。

lscpu
  • 该命令输出的信息包括 CPU 的详细硬件规格。

4.8 `stress` 命令

stress 命令用于模拟 CPU 负载,适合测试 CPU 性能或进行压力测试。

stress --cpu 4 --timeout 60
  • 使用 4 个线程执行 60 秒的压力测试。
  • 安装:yum install stress

11-13 09:15