D4
-
知识点:进程管理,ps、top、htop;kill、pkill;CPU、内存指标识别
-
实操:查看所有进程,找出CPU占用最高的进程,模拟杀掉后台进程
-
面试题:服务器CPU使用率100%,你怎么排查? 标准答案:先用top定位占用最高的进程PID,查看进程是业务程序还是异常进程,查看程序日志分析死循环、频繁GC等原因。
一、进程基础概念
1.进程定义:操作系统资源分配最小位,拥有独立内存、CPU、文件描述符;线程是调度单位,一个进程可包含多个线程
2.进程状态:
- R:运行态,正在CPU执行/等待CPU调度
- S:可中断休眠,等待资源(IO、信号),可被信号唤醒
- D:不可中断休眠,磁盘IO 阻塞,kill无法杀死
- Z:僵尸进程,子进程结束父进程未回收,占用PID
- T:停止态,被Ctrl+z暂停或收到stop信号
3.PID/PPID:进程ID、父进程ID;init/systemd(POID=1)系统一号进程,所有进程祖先
4.前台进程/后台进程
- 前台:占用中断,Ctrl+c终止
- 后台:&启动,脱离终端输入,输出仍打印;nohup/screen实现持久后台
5.进程优先级:nice值(-20~19,越小优先级越高),top可查看NI列
二、进程查看工具:ps、top、htop
1.ps静态进程快照(一次性查看)
基础参数
- ps aux : 展示所有用户全部进程

字段解析
USER :运行用户
PID :进程号
%CPU:CPU占比
%MEM:内存占比
VSZ:虚拟内存
RSS:物理内存
TTY:中断
STAT:进程状态
START:启动时间
TIME:累计CPU运行时间
COMMAND:启动命令
- ps -ef : 全格式进程树,带PPID 父进程ID
- ps aux --sort=-%cpu:按CPU占用降序排序,快速找高负载进程
- ps aux --sort=-%mem:按内存占用降序
拓展过滤用法
- ps aux |grep 进程名
- pgrep 进程名:只输出对应PID,配合kill使用
- ps -T -p PID :查看进程内所有线程(排查多线程CPU爆满)
2.top动态实时监控(系统自带,无需安装)

顶部系统全局指标(CPU / 内存核心识别,重点)
- 第一行:运行时长,系统负载
load avera:0.00,0.02,0.02 ---- 1/5/15分钟平均活跃进程数
判定:CPU核心数N , 负载持续 > N 代表CPU瓶颈
- 第二行:进程总览
进程总数、运行、休眠、僵尸、停止进程数量
- CPU分区(关键排障指标)
- us: 用户程序CPU占用(业务代码、应用程序,100%瓶颈多在此)
- sy: 内核态CPU占用(磁盘IO、系统调用、内核异常)
- id:空闲CPU,id接近0代表CPU打满
- wa:IO等待CPU,wa高说明磁盘读写瓶颈,不是程序CPU问题
- hi/si/st:硬中断、软中断、虚拟机偷取时间
- 第四、五行内存指标
- 物理内存: 总 , 空闲 , 已使用 ,缓存/缓冲区
- 拓展:Linux缓存机制,buff/cache会占用大量内存属于正常,可用内存=free+buff/cache
- Swap:交换分区,swap频繁使用代表物理内存不足,会严重卡顿
进程交互快捷键
- P :按CPU占用排序;
- M:按内存占用排序
- k:输入PID,发送信号杀死进程
- 1:展开多核CPU,查看单个核心占用
- z:高亮显示,区分高负载进程
- q:退出top
3.htop增强版top(需安装)
- 彩色界面、鼠标操作、进程树展示
- F5:显示父子进程树,快速定位僵尸进程、多线程程序
- F9:可视化选择kill信号,无需记信号编号
- 自带筛选、搜索,直接点击列排序,多核CPU分栏展示
三、进程终止工具:kill、pkill、killall
1.kill原理:发送信号给进程,进程收到信号自主推出(不是强制销毁)
常用信号(拓展)
- kill -15 PID 默认SIGTERM,优雅终止,允许程序保存日志、释放链接(推荐优先使用)
- kill -9 PID SIGKILL,强制杀死,无法拦截;丢失缓存数据、数据库连接、文件损坏风险,仅15无效时使用
- kill -2 PID 等价Ctrl+c,中断前台进程
- kill -1 PID SIGHUP,重新配置(nginx、java服务常用)
2.pkill:按进程名批量杀进程,无需PID
- pkill java 杀死所有Java进程
- pkill -f "python test.py" 匹配完整命令行进程
3.killall:同pkill,按程序名批量终止
4.拓展:nohup后台进程、&后台运行、jobs查看后台任务、fg/bg切换前后台
四、CPU、内存核心指标识别(排障核心)
1.CPU异常指标识别
- us高:业务代码问题(死循环、无限递归、频繁计算、java频繁FullGC)
- sy高:大量系统调用、磁盘频繁读写、内核bug、大量创建销毁进程
- wa高:IO瓶颈(磁盘慢、大量读写日志、数据库慢查询)
- load持续大于CPU核心数:CPU资源耗尽,请求排队阻塞
- 单核心100%,多核空闲:单线程程序死循环(程序未做并发)
2.内存异常指标识别
- used持续上涨,free持续下降:内存泄偶(程序未释放堆内存、缓存无过期清理)
- Swap频繁使用:物理内存不足,系统频繁交换磁盘,性能暴跌
- OOM killer:内存耗尽,系统自动杀死占用内存最高进程,查看日志/var/log/messages