Linux查看进程占用CPU,top和ps命令

前言

服务器突然卡了?CPU跑满了?想知道哪个进程占CPU最多?本文讲top和ps命令,帮你快速定位问题进程。

一、top命令 — 实时监控

启动top

top

top界面说明

第一行:

  • 系统时间、运行时间、登录用户数、负载(1/5/15分钟)

第二行:

  • 任务总数、运行中、睡眠中、停止、僵尸进程

第三行(CPU):

  • us:用户态占用
  • sy:内核态占用
  • id:空闲

第四行(内存):

  • total:总内存
  • used:已用
  • free:空闲

进程列表:

  • PID:进程ID
  • USER:运行用户
  • %CPU:CPU占用
  • %MEM:内存占用
  • COMMAND:进程名

top常用快捷键

快捷键 作用
P 按CPU排序
M 按内存排序
k 杀掉进程
q 退出
1 显示每个CPU核心

只看某个进程

top -p 进程ID

二、ps命令 — 查看进程快照

查看所有进程

ps aux

按CPU排序

ps aux --sort=-%cpu | head -10

解释:

  • aux:显示所有进程
  • --sort=-%cpu:按CPU降序
  • head -10:只看前10个

按内存排序

ps aux --sort=-%mem | head -10

查找特定进程

ps aux | grep nginx

三、查找占用CPU最高的进程

方法1:用top

top

按P,按CPU排序,第一个就是占用最高的。

方法2:用ps

ps aux --sort=-%cpu | head -5

输出:

USER  PID  %CPU  %MEM  COMMAND
root  1234  50.0  10.0  php-fpm

四、查找占用内存最高的进程

ps aux --sort=-%mem | head -5

五、杀掉进程

根据PID杀

kill 进程ID

强制杀

kill -9 进程ID

根据进程名杀

pkill nginx

杀掉所有php-fpm

pkill php-fpm

六、常见场景

场景1:CPU跑满了

排查步骤:

  1. 用top看哪个进程CPU高
  2. 如果是php-fpm,看是不是有慢请求
  3. 如果是mysql,看是不是有慢SQL
  4. 杀掉异常进程

场景2:内存占满了

排查步骤:

  1. 用top按M排序
  2. 看哪个进程内存高
  3. 杀掉或重启

场景3:某个进程一直跑

ps aux | grep 进程名

找到PID后杀掉。

七、常见坑

坑1:top和ps看到的CPU不一样

原因: top是实时刷新的,ps是快照。

解决: 用top看实时变化。

坑2:杀了进程又起来

原因: 有守护进程自动拉起。

解决: 找到父进程一起杀,或者停掉服务。

systemctl stop php-fpm

坑3:僵尸进程

现象: 进程状态是Z(Zombie)。

原因: 子进程退出了,父进程没回收。

解决: 重启父进程。

八、常用命令汇总

# 实时监控
top

# 按CPU排序
ps aux --sort=-%cpu | head -10

# 按内存排序
ps aux --sort=-%mem | head -10

# 查找进程
ps aux | grep 进程名

# 杀进程
kill PID
kill -9 PID
pkill 进程名

九、负载怎么看

什么是负载

负载就是正在等待CPU运行的进程数。

怎么判断高不高

  • 负载 < CPU核心数:正常
  • 负载 > CPU核心数:有点忙
  • 负载 > 2倍CPU核心数:很卡

查看CPU核心数

nproc

总结

记住:

  1. 用top实时看CPU和内存
  2. 按P按CPU排序,按M按内存排序
  3. 用ps aux --sort=-%cpu找CPU最高的
  4. 用kill -9 PID杀进程
  5. 负载超过CPU核心数就有问题

最常用:

top
ps aux --sort=-%cpu | head -10
kill -9 进程ID

遇到问题加QQ23979811 协助处理


emer 发布于  2026-10-9 07:58