在 Linux 系统中,top
命令是一个实时监控系统性能和查看进程状态的重要工具,它可以动态地显示系统中各进程的资源占用情况,包括 CPU、内存等。top
命令的输出界面包含丰富的信息,能够帮助用户了解当前系统的负载和进程的运行状况。
一、`top` 命令输出内容
1.1 启动 `top` 命令
在终端中输入以下命令来启动 top
:
top
执行命令进入top界面:
- 大写
E
:切换top
界面顶部的系统总内存和交换分区的单位(KiB
、MiB
、GiB
等)。 - 小写
e
:切换进程列表中(VIRT
、RES
、SHR
等列)的内存单位。
结果:
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` 命令
htop
是 top
命令的增强版,提供了更友好的界面和交互功能。
htop
- 需要先安装:
yum install htop
。 - 支持用颜色区分 CPU、内存使用情况,并且通过上下键可以快速选择和管理进程。
4.2 `mpstat` 命令
mpstat
是 sysstat
工具包中的命令,显示每个 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
。