ps 入门:看进程状态与十条常用命令
Linux 服务器上出了问题,第一反应往往是“先看看进程在不在、跑得怎么样”。ps 就是干这件事的标配工具:它拍下某一时刻的进程快照,不占资源、不改系统,适合入门排查。本文先讲清输出里每一列的含义和进程状态码,再给出十条最常用的命令,照着敲一遍就能上手。
一、进程是什么
简单说,进程就是正在运行的程序的一次执行。打开的编辑器、后台跑的数据库、定时执行的脚本,在系统里都对应一个或多个进程。每个进程有一个唯一的 PID(进程号),系统靠它区分和管理进程。
二、读懂 ps aux 的输出
最常用的一条命令是:
ps aux
输出的列分别是:USER(属主)、PID(进程号)、%CPU(CPU 占用率)、%MEM(内存占用率)、VSZ(虚拟内存)、RSS(实际占用的物理内存)、TTY(终端)、STAT(状态)、START(启动时间)、TIME(累计 CPU 时间)、COMMAND(启动命令)。
初学重点看四列:PID 用来定位进程,%CPU 和 %MEM 用来判断谁在吃资源,STAT 用来看进程健不健康,COMMAND 用来确认它到底是什么程序。
三、进程状态码:R、S、D、Z、T
STAT 一列由字母组成,最常见的五个是:
- R(Running):正在运行或等待 CPU,排队也算 R。
- S(Sleeping):在休眠,等某个事件,比如等用户输入、等网络数据,大多数进程平时都是 S。
- D(Disk sleep):在等磁盘 I/O,不能被信号打断,短时间出现正常,长期大量出现要查磁盘。
- Z(Zombie):僵尸进程,已经结束但父进程还没回收它的退出信息,本身不占内存,只占一个进程表项。
- T(Stopped):被暂停了,一般是收到 SIGSTOP,或在调试器里被停住。
所以只看状态就能做初步判断:全是 S 很正常;出现很多 D,先看磁盘;出现 Z,先找它的父进程。
四、十条常用命令
- 看全部进程:
ps aux - 只看自己的进程:
ps -u $USER - 按树状看父子关系:
ps auxf - 查某个程序:
ps aux | grep nginx - 只看某一个 PID:
ps -p 1234 -o pid,ppid,%cpu,%mem,stat,cmd - 按内存占用排序取前十:
ps aux --sort=-%mem | head -n 11 - 按 CPU 占用排序取前十:
ps aux --sort=-%cpu | head -n 11 - 看指定用户的进程:
ps -U www-data -o pid,%cpu,%mem,cmd - 自定义列输出:
ps -eo pid,ppid,stat,%mem,cmd --sort=-%mem | head -n 15 - 每两秒刷新一次:
watch -n 2 'ps aux --sort=-%cpu | head -n 15'
需要注意,第 4 条用 grep 自查时,输出里常常出现 grep 自身那一行,加 grep -v grep 过滤掉,或者改用 pgrep -a nginx。
五、和 top、kill 配合排查
ps 是快照,只能看一瞬间;想看动态变化用 top。排查的一般顺序是:ps aux --sort=-%cpu 找到最耗资源的进程,记下 PID;ls -l /proc/<PID>/exe 确认它对应哪个程序文件;问题确认后,用 kill <PID> 结束,顽固的才用 kill -9,并且先确认它不是系统关键进程。
六、常见误区
- 把 VSZ 当成真实内存占用:VSZ 包含共享库和未实际分配的虚拟内存,判断内存压力要看 RSS。
- 看到僵尸进程就紧张:少量 Z 进程无害,重点是找到不回收的父进程并修复它。
- 不加条件乱用 kill -9:可能丢数据或留下不一致的状态,先试普通 kill。
七、小结
记住三件事就够了:ps aux 看全貌,STAT 看健康,–sort 找“罪魁祸首”。今天可以在自己的机器上依次敲一遍上面十条命令,重点观察 STAT 一列和内存排序前三名,下次服务变慢时,你就知道该先看谁了。
- 点赞
- 收藏
- 关注作者
评论(0)