DC娱乐网

每天一个 Linux 知识:实时监控系统资源 top 和 htop

Linux 系统在运行过程中,资源使用状态会随进程活动动态变化。以下场景必须依赖实时监控工具:排查卡顿原因:当系统响应缓

Linux 系统在运行过程中,资源使用状态会随进程活动动态变化。

以下场景必须依赖实时监控工具:

排查卡顿原因:当系统响应缓慢(如打开终端延迟、应用启动卡住)时,需通过监控确认是 CPU 占用过高、内存不足还是磁盘 I/O 瓶颈;定位异常进程:若某个进程异常占用资源(如 CPU 使用率长期 100%、内存泄漏导致内存耗尽),需实时跟踪其状态并及时终止;评估系统负载:在部署新服务(如 Nginx、MySQL)前,需通过监控了解当前系统空闲资源,判断是否具备运行新服务的条件;预防资源耗尽:通过实时监控提前发现资源耗尽风险(如内存使用率接近 90%),避免系统因 OOM(内存溢出)或 CPU 过载崩溃。

Linux 中还有 ps(静态查看进程)、free(查看内存)、df(查看磁盘)等非实时监控工具,但这类工具仅能获取“执行命令瞬间”的资源状态,无法反映动态变化。例如,用 ps aux 查看进程时,若某个进程的 CPU 使用率在 1 秒内从 10% 飙升至 90%,静态工具无法捕捉这一变化;而 top/htop 会以固定间隔(默认 3 秒)刷新数据,真正实现“实时跟踪”。

top 命令

top 是所有 Linux 发行版(如 CentOS、Ubuntu、Debian)默认预装的工具,无需额外安装即可使用。它以文本界面实时展示系统整体资源使用情况和进程状态,是运维人员的“入门必备工具”。

在终端中直接输入 top 命令即可启动实时监控界面:

top

启动后,界面会分为 系统概览区(顶部)和 进程列表区(底部)两部分,默认每 3 秒刷新一次数据(可通过交互命令修改刷新间隔)。

#以 Ubuntu 22.04 系统的 top 界面为例,各区域信息含义如下:

(1)系统概览区(前 5 行)

第 1 行:系统整体状态

top - 14:30:00 up 2 days, 8:15, 2 users, load average: 0.85, 0.92, 0.88 14:30:00:当前系统时间;up 2 days, 8:15:系统已运行时间(2 天 8 小时 15 分钟);2 users:当前登录系统的用户数(远程 SSH 登录和本地终端登录均计入);load average: 0.85, 0.92, 0.88:系统负载平均值,分别代表 1 分钟、5 分钟、15 分钟 内的平均负载。

负载值的解读需结合 CPU 核心数:若系统为 4 核 CPU,负载值 <4 表示系统空闲,>4 表示负载过高(如负载值 8 代表 CPU 已饱和)。

第 2 行:进程统计

Tasks: 230 total, 1 running, 228 sleeping, 1 stopped, 0 zombie 230 total:系统当前运行的总进程数(包括所有状态的进程);1 running:处于 “运行中” 状态的进程数(正在占用 CPU 执行任务);228 sleeping:处于 “休眠中” 状态的进程数(等待资源或事件触发,如等待用户输入);1 stopped:处于 “暂停” 状态的进程数(被 Ctrl+Z 暂停或通过信号暂停);0 zombie:僵尸进程数(已终止但未被父进程回收资源的进程,数量不为 0 需排查)。

第 3 行:CPU 资源使用

%Cpu(s): 12.5 us, 2.0 sy, 0.0 ni, 84.5 id, 0.5 wa, 0.0 hi, 0.5 si, 0.0 st

各项均为 CPU 使用率百分比,总和为 100%,核心指标解读如下:

us(user):用户空间进程占用 CPU 比例(如 Python、Java 应用等,占比过高通常是应用本身消耗资源);sy(system):内核空间进程占用 CPU 比例(如系统调用、内存管理,占比过高可能是内核优化不足);id(idle):CPU 空闲比例(占比过低表示 CPU 负载高,如 <10% 说明 CPU 接近饱和);wa(iowait):CPU 等待磁盘 I/O 完成的时间比例(占比过高表示磁盘读写缓慢,是 I/O 瓶颈的核心指标);ni(nice):优先级调整后的用户进程 CPU 占比;hi(hardware irq):硬件中断占用 CPU 比例;si(software irq):软件中断占用 CPU 比例;st(steal):虚拟机被宿主机抢占的 CPU 比例(仅虚拟机场景有效)。

第 4-5 行:内存资源使用

MiB Mem : 15980.0 total, 8920.5 free, 4230.3 used, 2829.2 buff/cache MiB Swap: 16384.0 total, 16384.0 free, 0.0 used. 11230.6 avail Mem

单位为 MiB(1 MiB = 1024 KiB),核心指标解读:

Mem(物理内存):

total:物理内存总大小(如 15980.0 MiB ≈ 16 GB);free:完全空闲的物理内存(未被任何进程或缓存使用);used:已被进程占用的物理内存;buff/cache:用于磁盘缓存(buffer + cache)的内存(这部分内存可在进程需要时被释放,并非“完全占用”);

Swap(交换分区):

当物理内存不足时,系统会将部分不常用进程的内存数据写入 Swap 分区(类似 Windows 的虚拟内存);used 数值过高(如超过 50%)表示物理内存已严重不足,可能导致系统卡顿,需及时优化(如关闭无用进程、增加物理内存);avail Mem:可用物理内存(= free + buff/cache 中可释放部分),是判断内存是否充足的关键指标(若 avail Mem 长期 < 10%,需警惕内存不足)。(2)进程列表区(第 6 行及以下)

进程列表按默认规则(CPU 使用率从高到低)排序,每行代表一个进程,各列含义如下(关键列已标注):

列名

含义

关键说明

PID

进程唯一 ID

定位进程的核心标识(如通过 kill PID 终止进程)

USER

进程所属用户

区分系统进程(如 root)和普通用户进程(如 ubuntu)

PR

进程优先级(Priority)

数值越小优先级越高(系统动态调整,用户无法直接修改)

NI

进程nice值

决定进程优先级的调整幅度(-20~19,值越小优先级越高,用户可通过 nice/renice 修改)

VIRT

进程虚拟内存大小

包括物理内存、Swap、共享库等,参考意义不大

RES

进程占用物理内存大小(常驻内存)

核心指标——反映进程实际占用的物理内存(不包括 Swap 和缓存)

SHR

进程共享内存大小

与其他进程共享的内存(如共享库,无需重复计算)

S

进程状态

常用状态:R(运行中)、S(休眠)、D(不可中断休眠,I/O 相关)、Z(僵尸)、T(暂停)

%CPU

进程 CPU 使用率(更新周期内)

实时反映进程对 CPU 的占用情况(如 100% 表示占用一个核心满负荷运行)

%MEM

进程内存使用率

进程占用物理内存占系统总内存的比例(如 5% 表示占用 16GB 内存中的 800MB)

TIME+

进程累计占用 CPU 时间

从进程启动到当前的总 CPU 消耗(如 00:05.20 表示累计占用 5.2 秒)

COMMAND

进程启动命令

显示进程的启动指令(如 python app.py、/usr/sbin/nginx)

top 交互命令

top 启动后并非“只读界面”,可通过快捷键执行排序、筛选、刷新等操作(无需退出界面,直接按下对应按键即可)。以下是最常用的交互命令:

排序操作(按指定指标排序)

默认按 %CPU 降序排序,可通过以下按键切换排序规则:

P(大写):按 %CPU 降序排序(默认)——快速定位 CPU 占用最高的进程;M(大写):按 %MEM 降序排序——快速定位内存占用最高的进程;N(大写):按 PID 升序排序——按进程 ID 顺序查看;T(大写):按 TIME+(累计 CPU 时间)降序排序——定位长期占用 CPU 的进程;R(大写):反向排序(如当前是 CPU 降序,按 R 后变为升序)。筛选与搜索

当系统进程数较多(如数百个)时,需通过筛选快速找到目标进程:

u(小写):按用户筛选——按下 u 后输入用户名(如 root、ubuntu),界面仅显示该用户的进程;k(小写):终止指定进程——按下 k 后输入目标进程的 PID,按回车确认,默认发送 SIGTERM 信号(温和终止),若需强制终止,可在输入 PID 后按 Ctrl+C,再执行 kill -9 PID;/(斜杠):搜索进程名——按下 / 后输入关键词(如 nginx、python),界面会高亮显示匹配的进程,按 n 切换到下一个匹配结果。界面控制s(小写):修改刷新间隔——按下 s 后输入时间(单位:秒,如 1 表示每秒刷新一次),默认 3 秒(刷新过快会增加系统开销,建议不小于 1 秒);q(小写):退出 top 界面——这是唯一的退出方式(不可用 Ctrl+C,会终止 top 进程但可能导致界面残留);1(数字 1):切换 CPU 核心显示——在多核 CPU 系统中,按下 1 会从“总 CPU 使用率”切换为“每个核心的单独使用率”(如 4 核 CPU 会显示 4 行 %Cpu0~%Cpu3),便于定位某一核心是否过载;b(小写):高亮显示当前排序列——按下 b 后,当前排序的列(如 %CPU)会以高亮背景显示,更易识别;W(大写):保存当前配置——按下 W 后,当前的排序规则、刷新间隔、筛选条件等会保存到 ~/.toprc 文件,下次启动 top 时自动加载配置。top 实用参数

除了交互命令,top 还支持通过启动参数直接自定义监控规则,无需进入界面后调整。

常用参数如下:

top -p PID1,PID2:仅监控指定 PID 的进程——例如 top -p 1234,5678 仅显示 PID 为 1234 和 5678 的两个进程,适合专注跟踪特定进程;top -u 用户名:启动时直接筛选用户进程——例如 top -u ubuntu 启动后仅显示 ubuntu 用户的进程,无需再按 u 筛选;top -d 秒数:指定刷新间隔——例如 top -d 2 表示每 2 秒刷新一次,替代进入界面后按 s 调整;top -b -n 次数:以批处理模式输出(非交互界面)——例如 top -b -n 1 > top_log.txt 会将“一次刷新的 top 数据”保存到 top_log.txt 文件,适合后续分析或定时任务(如通过 crontab 每小时保存一次系统状态)。htop 命令

htop 是由第三方开发的 top 增强工具,解决了 top 界面不够直观、操作不够便捷的问题。它支持鼠标交互、彩色显示、进程树视图等功能,且兼容 top 的核心操作逻辑,是运维人员的“进阶选择”。

与 top 不同,htop 并非所有 Linux 发行版默认预装,需手动安装:

Debian/Ubuntu 系列(使用 apt 包管理器):sudo apt update && sudo apt install htop -y

CentOS/RHEL 系列(使用 yum 或 dnf 包管理器):# CentOS 7 sudo yum install epel-release -y && sudo yum install htop -y # CentOS 8/RHEL 8+ sudo dnf install htop -y Fedora 系列:sudo dnf install htop -y

安装完成后,在终端输入 htop 即可启动:

htop

htop 的界面布局与 top 类似,但在视觉呈现和信息组织上更友好。