在计算机服务器上看到“ps”字样,通常指的是进程查看命令,它能快速列出系统当前运行的进程,帮助定位故障和排查问题。
很多刚接触服务器运维的朋友,登录Linux系统后敲下ps,屏幕弹出一堆看不懂的代码,心里难免发慌,别急,这个命令其实是运维工具箱里最顺手的一把螺丝刀,它全称叫Process Status,翻译过来就是“进程状态”,作用就是把你服务器上正在跑的程序给你摊开看,今天咱就把它聊透,聊到你能用它直接解决实际问题。
为什么服务器总出现ps?它到底在干什么
服务器不像家用电脑,没人天天开机点鼠标,它所有活儿都是程序在后台默默干的,这些运行中的程序就是“进程”,你执行一条命令,就是让系统去干一件事,而ps管的就是把这件事的“作业名单”给你列清楚。
行业共识认为,服务器故障排查中,八成以上的性能问题,第一步都是从看进程开始的,你可以把ps想象成服务器的“体检报告单”,上面写满了谁在干活、干了多久、占了多少资源、现在的状态是健康还是卡住了。
ps -ef
这是一条最常用的命令,执行后你会看到类似这样的输出。
| 列名 | 含义 | 通俗解释 |
|---|---|---|
| UID | 启动进程的用户 | 谁派它来的 |
| PID | 进程编号 | 每个进程的身份证号 |
| PPID | 父进程编号 | 它是谁的下级 |
| C | CPU使用率 | 吃处理器算力的比例 |
| STIME | 启动时间 | 什么时候开始上班的 |
| TTY | 终端类型 | 在哪个窗口工作 |
| TIME | 累计CPU时间 | 一共吃了多少算力 |
| CMD | 命令名称 | 具体在跑什么程序 |
看到没,服务器其实就是一个“大管家”,ps就是它的考勤记录本。
ps aux和ps -ef的区别是什么,该用哪个
这是新手最容易懵的一点,两条命令都能看进程,但输出格式不同,习惯用法也不同。

ps aux 是BSD风格,输出更注重资源占用情况,比如CPU和内存用掉了多少百分比,当你怀疑服务器卡顿、内存不足时,这条命令最直观。
ps -ef 是System V风格,输出更注重进程关系,特别是能看到父进程和子进程的连带关系,排查进程被哪个上级拉起来时,用它更清楚。
用哪个看场景,这里给你一个简单的选择逻辑:
- 想快速知道哪个进程吃光了CPU,就用
ps aux,然后按CPU排序查看。 - 想查某个程序是不是在运行,用的是
ps -ef | grep 关键词。 - 想理解进程家族树,
ps -ef配合--forest参数会更直观。
现在的主流发行版两条命令都支持,核心数据也没差多少,区别主要在显示习惯。绝大多数情况下,我建议你优先用ps aux,因为资源占比信息对排查问题更有用。
一个实用小技巧,在ps aux后面加上sort管道,直接把最耗资源的进程顶到前面来:
ps aux --sort=-%cpu | head -20
这条命令的执行逻辑是:列出所有进程,按CPU使用率从高到低排序,只显示前20行,当你在服务器卡成一锅粥的时候,敲这一下,祸首基本就现形了。
百兆带宽的服务器卡顿,用ps命令怎么看
假设你租了一台服务器,网站突然打不开,远程连上去也慢得像蜗牛,这时候,你的第一句话不应该是“完了完了”,而是冷静地敲下ps aux。
看输出的时候,重点扫三个地方:
- R状态:进程在运行队列里,说明它在积极干活或者抢资源。
- D状态:进程在等硬盘输入输出,通常是磁盘太慢拖累了。
- Z状态:僵尸进程,进程死了但没被回收,就像宿舍里退宿却没交钥匙的老同学。
如果看到大量R状态的进程,且都是同一个程序,比如php-fpm或者java,说明并发请求太多,程序处理不过来。解决办法简单粗暴:加内存或者优化代码减少内存占用。
如果看到D状态特别多,别纠结进程本身,那是硬盘在“求你”换一个更快的SSD,据工信部近年来的行业报告,云服务器性能瓶颈中,

磁盘输入输出等待是仅次于CPU超限的第二大原因。
还有一种更隐蔽的情况:进程列表很干净,但服务器就是慢,这时候别死磕ps,去查磁盘空间:
df -h
有时候是日志文件把磁盘塞爆了,ps看到的进程本来没事,结果写日志的时候卡住了,这一招能帮你在排查思路上少绕一大圈。
服务器cpu占用过高怎么排查,ps的精髓用法
很多运维新手处理“CPU报警”时,第一反应是重启服务器,其实你只需要用ps加一个参数,三分钟内就能定位到罪魁祸首。
标准排查流程如下:
- 先用
ps aux --sort=-%cpu | head -10找出CPU占用最高的前十个进程。 - 用
top -p 进程ID单独盯着这个进程,看它的CPU消耗是否持续走高。 - 如果这个进程确实有问题,用
systemctl status 进程ID或者ls -l /proc/进程ID/cwd查它的启动目录和配置。 - 确认无用的进程,用
kill -9 进程ID强制终止。
这里重点说下第4步,kill -9是最后的杀手锏,它直接让内核帮你“物理消灭”进程,不给它保存数据的机会。能用kill(不带-9)就尽量先温和地请它退出,实在不行再上-9。
排查CPU占用过高时,有个命令组合能看出线程级别的问题:
ps -Lp 进程ID -o pid,tid,pcpu,comm
这条命令输出的是进程内部所有线程的CPU占用,如果单个线程的CPU爆表,比如超过80%,你基本可以断定代码陷入了死循环,这时候把问题丢给开发同事,他们看到这条数据会秒懂。
手把手教你读懂ps输出里最迷惑的几列
ps aux输出的每一列都藏着信息,但有几列是新手最容易看走眼的。
VSZ和RSS,这一对你一定见过,VSZ是虚拟内内存大小,RSS是实际物理内存,很多同学看到RSS数值很高就以为内存不够了,其实不一定,RSS包含了共享库的内存,两个进程可能同时计算同一份共享库的内存,导致总量看起来虚高。
TIME列,这个数值代表进程累计消耗的CPU时间,不是你理解的“运行了多久”,一个进程可能在后台跑了一周,但TIME只有几分钟,因为它在等待输入输出,并没有持续消耗CPU,反过来,一个进程只跑了一小时,但TIME就有50分钟,说明它是计算密集型任务,几乎没歇过。

STAT列,这个列是一个字母或几个字母的组合,刚开始看确实容易一头雾水,常见的组合含义是这样:
R:正在运行,属于正常干活状态。S:睡眠状态,等待某个事件唤醒,多数进程都这样。D:不可中断睡眠,主要在等硬盘读写,如果批量出现就要警惕。Z:僵尸进程,需要被父进程回收。<:高优先级,被系统特殊关照。N:低优先级,资源紧张时会被“欺负”。
如果你看到Z状态且持续不消失,处理办法是检查它的PPID(父进程),然后kill父进程,让系统自动回收它,如果父进程是init(PID为1),那只能确认下这个僵尸进程有没有对应的服务,如果只是残留,通常不影响系统稳定。
服务器常见问题解答,关于ps的真实问答
问:用ps查不到某个程序,但网站明显在跑,这是为什么?
可能是程序名被修改了,比如伪装成系统进程名,你可以用ps aux | grep -v grep过滤掉干扰项再看,另一种情况是程序使用了多线程模型,主进程的启动参数和程序名对不上,需要用ls -l /proc/进程ID/exe查看真实的可执行文件路径。
问:ps输出里PID为1的进程是什么?
PID为1的是系统初始化进程,也就是所有进程的“老祖宗”,在CentOS 7以前叫init,CentOS 7以后叫systemd,它负责拉起系统所有服务,绝对不能轻易杀掉,如果你看到PID 1的进程CPU占用很高,说明系统整体处于高负载状态,问题在底层而不在这一个进程上。
问:为什么我输入ps看到的内容特别少,跟别人截图里的一大篇不一样?
因为你没有加任何参数,裸的ps命令只显示当前终端下属于你的进程,默认就几个,想看全部进程,必须加aux或ef参数,这不是命令坏了,这是Linux的设计哲学:没让你看的东西,默认就不打扰你。
图片来源于AI模型,如侵权请联系管理员。作者:酷小编,如若转载,请注明出处:https://www.kufanyun.com/ask/722176.html


评论列表(5条)
这篇文章写得非常好,内容丰富,观点清晰,让我受益匪浅。特别是关于进程的部分,分析得很到位,给了我很多新的启发和思考。感谢作者的精心创作和分享,期待看到更多这样高质量的内容!
这篇文章写得非常好,内容丰富,观点清晰,让我受益匪浅。特别是关于进程的部分,分析得很到位,给了我很多新的启发和思考。感谢作者的精心创作和分享,期待看到更多这样高质量的内容!
@花梦8651:这篇文章的内容非常有价值,我从中学习到了很多新的知识和观点。作者的写作风格简洁明了,却又不失深度,让人读起来很舒服。特别是进程部分,给了我很多新的思路。感谢分享这么好的内容!
@花梦8651:读了这篇文章,我深有感触。作者对进程的理解非常深刻,论述也很有逻辑性。内容既有理论深度,又有实践指导意义,确实是一篇值得细细品味的好文章。希望作者能继续创作更多优秀的作品!
读了这篇文章,我深有感触。作者对进程的理解非常深刻,论述也很有逻辑性。内容既有理论深度,又有实践指导意义,确实是一篇值得细细品味的好文章。希望作者能继续创作更多优秀的作品!