当前位置:首页>Linux>Linux 进程监控实战指南:ps、htop、lsof 三大利器详解

Linux 进程监控实战指南:ps、htop、lsof 三大利器详解

  • 2026-10-11 07:59:11
Linux 进程监控实战指南:ps、htop、lsof 三大利器详解
作为 Linux 运维或开发人员,进程监控是日常工作中不可或缺的技能。本文系统梳理 ps、htop、lsof 三大核心命令,从基础用法到高级技巧,帮你建立完整的进程监控知识体系。

一、ps —— 进程查看的基石

ps(Process Status)是 Linux 中最基本也最强大的进程查看命令。它能告诉你:当前有哪些进程在运行、运行状态如何、是否存在僵尸进程、哪些进程占用了过多资源等。

1.1 基本语法

ps [选项]

1.2 核心参数速查

参数作用
-A / -e显示所有进程
-a显示当前终端的所有进程(除会话引线)
-x显示没有控制终端的进程
-u按用户筛选进程
-f全格式输出,通常与其他选项联用
-l长格式输出(含 F、wchan、C 等字段)
-p按 PID 筛选
-o自定义输出列
-H以层次结构显示进程树
-L显示线程信息
-m显示所有线程

1.3 读懂 ps aux 输出

执行 ps aux 后,每一列的含义如下:

列名含义
USER进程所属用户
PID进程 ID
%CPUCPU 使用率
%MEM物理内存使用率
VSZ虚拟内存使用量(KB)
RSS常驻内存使用量(KB)
TTY所在终端,? 表示与终端无关
STAT进程状态(见下方状态说明)
START进程启动时间
TIME累计 CPU 使用时间
COMMAND启动命令

进程状态(STAT)详解:

状态码含义
RRunning,正在运行或可运行
SSleeping,可中断睡眠,等待信号唤醒
D不可中断睡眠,通常在等待 I/O
TStopped,已停止或被追踪
ZZombie,僵尸进程,已终止但父进程未回收
IIdle,空闲内核线程(内核 4.14+)

补充: STAT 列还可能附带修饰符,如 <(高优先级)、N(低优先级)、s(会话首进程)、l(多线程)、+(前台进程组)。

1.4 进程树与线程栈

pstree —— 以树状结构查看进程关系:

pstree -p grafana    # 以 grafana 用户查看进程树,-p 显示 PID

pstack —— 查看进程/线程的调用栈:

pstack <pid>         # 输出指定进程的栈跟踪信息

多线程情况下,pstack 会分别显示每个线程的栈信息,这在排查死锁和性能问题时非常有用。

1.5 高频实战命令

# 查看所有 Java 进程ps aux | grep java# 显示某进程的所有线程ps -p <pid> -L# 自定义显示列ps -e -o pid,uname,pcpu,pmem,comm# 查看进程启动时间和运行时长ps -eo pid,lstart,etime | grep <pid># 按内存排序(降序)ps aux --sort=-rss# 按 CPU 排序(降序)ps aux --sort=-%cpu# 查看进程堆栈pstack <pid># 查看指定进程下的线程 ID 和 CPU 占用ps -eLo pid,lwp,pcpu | grep <pid>

二、htop —— 交互式进程监控神器

htop 是 top 的增强版,提供彩色界面、鼠标支持、横向/纵向滚动,体验远优于传统 top。

2.1 安装

# CentOS / RHELyum -y install epel-release htop# Ubuntu / Debianapt install htop# macOSbrew install htop

2.2 参数说明

参数作用
-C单色模式
-d <秒>设置刷新间隔
-u <用户>只显示指定用户的进程
-p <PID>只显示指定 PID
-s <列名>按指定列排序
-t以树状视图显示

2.3 界面四大区域

启动 htop 后,界面自上而下分为四个区域:

区域内容
区域 1CPU 各核使用率、内存及 Swap 使用率(进度条)
区域 2任务数、负载均值(1/5/15 分钟)、系统运行时间
区域 3进程列表(核心工作区)
区域 4底部功能键提示(F1-F10)

2.4 进程列表字段说明

字段含义
PID进程 ID
USER进程所有者
PR优先级
NINice 值(负值=高优先级)
VIRT虚拟内存
RES常驻物理内存
SHR共享内存
S状态(S=睡眠,R=运行,Z=僵尸,D=不可中断)
%CPUCPU 使用率
%MEM内存使用率
TIME+累计 CPU 时间
COMMAND启动命令

2.5 htop 常用快捷键(补充)

快捷键功能
F1帮助
F2设置(自定义显示列、配色等)
F3搜索进程
F4过滤进程
F5树状视图切换
F6选择排序列
F9发送信号(Kill)
F10退出
Space标记进程(可批量操作)
u按用户筛选
H隐藏/显示用户线程
K隐藏/显示内核线程
t切换树状/列表视图

三、lsof —— 一切皆文件的侦探

lsof(List Open Files)基于 Linux "一切皆文件"的哲学,能列出所有被进程打开的文件,包括普通文件、目录、网络套接字、管道、设备等。它是排查端口占用、文件锁定、磁盘空间未释放等问题的利器。

3.1 基本语法

lsof [选项] [文件名]

3.2 核心参数

参数作用
-i列出网络连接(可指定协议/端口/IP)
-p <PID>查看指定进程打开的文件
-u <用户>查看指定用户打开的文件
-c <进程名>查看指定进程名打开的文件
+d <目录>列出目录下被打开的文件
+D <目录>递归列出目录下被打开的文件
-a多条件"与"连接
-d <FD>按文件描述符筛选
-g按 GID 筛选
-n不将 IP 转换为主机名(加快速度)

3.3 输出字段解读

字段含义
COMMAND进程名称
PID进程 ID
USER进程所有者
FD文件描述符(见下表)
TYPE文件类型(见下表)
DEVICE磁盘设备
SIZE/OFF文件大小/偏移量
NODE索引节点
NAME文件路径/名称

常见 FD 类型:

FD含义
cwd当前工作目录
rtd根目录
txt程序代码(可执行文件或共享库)
mem内存映射文件
0u标准输入
1u标准输出
2u标准错误

常见文件类型:

TYPE含义
DIR目录
REG普通文件
CHR字符设备
BLK块设备
UNIXUNIX 域套接字
FIFO管道
IPv4 / IPv6网络套接字

3.4 高频实战命令

# 查看谁在使用某个文件lsof /var/log/syslog# 递归查看目录下被打开的文件lsof +D /var/log/# 查看某用户打开的所有文件lsof -u nginx# 查看某程序打开的文件lsof -c mysql# 同时查看多个程序lsof -c mysql -c apache# 排除某用户lsof -u ^root# 查看指定进程打开的文件lsof -p <pid># 列出所有网络连接lsof -i# 只看 TCP 连接lsof -i tcp# 只看 UDP 连接lsof -i udp# 查看谁在使用 3306 端口lsof -i :3306# 查看指定端口的 TCP 连接lsof -i tcp:80# 查看某用户的所有活跃网络端口lsof -a -u username -i# 查找已删除但空间未释放的文件(排查磁盘满问题)lsof | grep deleted

四、实战场景速查(补充)

场景 1:排查 CPU 飙高

# 1. 找到 CPU 占用最高的进程ps aux  --sort=-%cpu | head -10# 2. 查看该进程的线程级 CPU 分布ps -p <pid> -Lo pid,lwp,pcpu,comm --sort=-pcpu | head -20# 3. 将线程 ID 转为十六进制,配合 jstack 定位 Java 热点代码printf  "%x\n" <lwp>jstack <pid> | grep -A 20 <hex_lwp>

场景 2:排查内存泄漏

# 按内存排序,找到内存大户ps aux --sort=-rss | head -10# 持续监控某进程的内存变化watch -n 2  'ps -p <pid> -o pid,rss,vsz,comm'# 查看进程内存映射详情cat /proc/<pid>/smaps | head -50pmap -x <pid>

场景 3:排查磁盘空间被占满但 du 找不到大文件

# 已删除文件仍被进程持有,空间未释放lsof | grep deleted# 找到后可以 kill 对应进程或重启服务释放空间

场景 4:排查端口占用冲突

# 查看 8080 端口被谁占用lsof -i :8080# 或使用 ss 命令ss -tlnp | grep 8080

场景 5:排查僵尸进程

# 查找僵尸进程ps aux | awk '$8=="Z" {print}'# 找到僵尸进程的父进程ps -o ppid=-p <zombie_pid># 通知父进程回收(发送 SIGCHLD)kill -s SIGCHLD <ppid>

五、三大工具对比总结

维度pshtoplsof
定位进程快照实时交互监控文件/连接追踪
输出方式静态文本动态彩色界面静态文本
适用场景脚本自动化、精确筛选人工实时观察排查文件/端口/连接问题
学习成本中低中
是否内置是需安装多数发行版内置

六、延伸阅读(补充)

除了本文介绍的三大工具,以下命令也值得了解:

  • top —— 经典实时监控工具,htop 的前身

  • pidstat —— 按进程统计 CPU、内存、I/O(属于 sysstat 套件)

  • strace —— 跟踪进程的系统调用,排查异常行为

  • ss —— netstat 的现代替代,查看网络连接更快

  • nmon —— 综合性能监控工具,适合长时间数据采集

  • /proc 文件系统 —— 进程信息的终极来源,/proc/<pid>/ 下包含进程的所有细节


掌握 ps、htop、lsof 这三大工具,足以应对日常 90% 以上的进程监控和故障排查需求。建议收藏本文,在实际工作中反复实践,逐步形成自己的排查思路和命令组合。

最新文章

随机文章