在 Ubuntu 服务器的日常运维工作中,有一类问题几乎每天都会遇到:服务器突然变慢、某个进程占满 CPU、内存被耗尽导致 SSH 都连不上。作为运维人员,能否第一时间定位到是哪个进程在”捣乱”,往往决定了故障恢复的速度。今天我们就来系统学习 Ubuntu 下的进程管理与性能监控,掌握 ps、top、htop 以及系统负载分析这一整套工具链,让你面对性能问题时不再抓瞎。

一、核心概念:进程、线程与负载
在动手之前,先厘清几个高频出现却又容易混淆的概念。
进程(Process) 是程序的一次运行实例,它拥有独立的地址空间、PID(进程号)、PPID(父进程号)和用户归属。线程(Thread) 则是进程内部更轻量的执行单元,共享同一进程的内存空间。系统负载(Load Average) 表示处于”可运行状态”和”不可中断睡眠状态”的任务平均数,它反映的是系统整体的繁忙程度,而不是单纯的 CPU 使用率。
一个常见的误区是:看到 load 很高就以为是 CPU 打满。实际上,load 高也可能是因为大量进程在等待 I/O(比如磁盘读写、网络请求),此时 CPU 反而不一定忙。理解这一点,是读懂监控数据的关键。
二、实战步骤
1. 用 ps 查看进程快照
ps 是查看进程瞬间状态的经典命令,常用的组合是 ps aux:
ps aux | head -20
输出各列依次是:用户、PID、CPU 占用、内存占用、虚拟内存、物理内存、终端、状态、启动时间、CPU 时间、命令。想按 CPU 或内存排序,可以配合 sort:
# 按 CPU 占用降序,取前 10
ps aux --sort=-%cpu | head -11
# 按内存占用降序,取前 10
ps aux --sort=-%mem | head -11
如果只想看某个进程的详细信息,可以用 PID 精确查询:
ps -fp 1234
2. 用 top 实时监控
ps 是静态快照,而 top 提供实时刷新的动态视图,是排查性能问题的第一入口。直接运行:
top
进入交互界面后,有几个常用快捷键:按 1 展开查看每个 CPU 核心;按 P 按 CPU 排序;按 M 按内存排序;按 q 退出。顶部的 load average 三个数值分别代表最近 1 分钟、5 分钟、15 分钟的平均负载。
如果希望以批处理模式输出一次结果(便于脚本采集),可以用:
top -bn1 | head -20
3. 用 htop 提升体验
htop 是 top 的增强版,界面更直观,支持鼠标点击、颜色标记和树形展示进程父子关系。先安装:
sudo apt update
sudo apt install -y htop
然后运行:
htop
在 htop 中按 F5 可以切换树形视图,直观看出哪个父进程 fork 出了大量子进程;按 F9 可以直接给选中的进程发送信号(比如 9 强制杀死);按 F4 可按关键字过滤进程。
4. 用 kill 和信号管理进程
定位到问题进程后,需要对其进行管理。优雅终止用 SIGTERM(信号 15),强制终止用 SIGKILL(信号 9):
# 优雅终止(给进程清理的机会)
kill 1234
# 强制终止(进程不响应时使用)
kill -9 1234
# 按名称终止所有匹配进程
pkill -f nginx
三、常见问题
问:load average 多少算高?
一般经验法则是:单核机器 load 长期超过 1,多核机器 load 超过核心数,就值得关注。比如 4 核机器 load 达到 8,说明系统已经明显过载。
问:top 里看到很多进程状态是 D,是怎么回事?
状态 D 表示”不可中断睡眠”,通常是进程卡在等待磁盘 I/O 或网络 I/O,无法被信号打断。如果大量进程长期处于 D 状态,很可能是磁盘故障或存储性能瓶颈。
问:僵尸进程(Zombie)要不要处理?
僵尸进程(状态 Z)本身不占资源,但如果大量累积,说明父进程没有正确回收子进程(缺少 wait() 调用)。排查父进程并修复代码,或重启父进程即可。
四、总结
今天我们从进程、线程、负载这些基础概念出发,系统掌握了 ps 查看快照、top 实时监控、htop 交互分析,以及 kill/pkill 的进程管理方法。核心思路可以概括为三步:先用 top/htop 观察整体负载和 CPU/内存热点,再用 ps 精确定位具体进程,最后用 kill 信号进行干预。记住 load 高不一定是 CPU 满,要先判断是计算型还是 I/O 型瓶颈,再对症下药。下一篇我们将进入日志管理与审计,学会用 journald 和 rsyslog 追踪系统行为,让故障排查有据可查。
下期预告:第 10 天「日志管理与审计——journald、rsyslog 与日志轮转」,敬请期待。















暂无评论内容