Linux查看进程占用内存最高,kill进程方法
前言
服务器内存吃紧、Swap被刷爆,往往是某个程序内存泄漏或卡死进程占着不放。要先找到"谁在吃内存",确认后再决定是优雅重启还是直接kill。本篇给出从查进程到杀进程的完整命令。
一、按内存占用排序找进程
ps 一次性列出并排序,输出RES(实际物理内存,单位KB):
# 按内存占用从高到低,取前10
ps aux --sort=-%mem | head -10
# 按CPU占用排序
ps aux --sort=-%cpu | head -10
列说明:USER 进程用户、%MEM 内存占比、RSS 实际物理内存、COMMAND 启动命令。
更直观的内存排行:
# 显示内存占用最高的进程,VSZ/RSS单位KB
ps -eo pid,ppid,user,%mem,%cpu,rss,comm --sort=-rss | head
二、用top/htop交互查看
top
# 进入后按 M 按内存排序,按 P 按CPU排序,k 输入PID杀进程,q退出
装个 htop 更清楚:
yum install -y htop
htop
三、按名字批量找进程PID
# 查php-fpm相关进程
pgrep -af php-fpm
# 或
ps -ef | grep php-fpm | grep -v grep
pgrep 只输出PID,-a 带命令行。
四、kill进程(先温柔再强杀)
# 正常结束(SIGTERM=15),给进程清理机会
kill PID
# 按名字结束所有同名进程
killall php-fpm
pkill -f "php think"
# 杀不掉再强制杀(SIGKILL=9),数据可能损坏,最后手段
kill -9 PID
信号优先级:
kill -15(默认):请求退出,进程可捕获;kill -9:直接杀死,无法拦截。
服务类进程优先用它自己的重启命令而不是裸kill:
systemctl restart php-fpm
五、常见坑
- 只看%MEM不看RSS:共享内存会被重复算,判断真实占用看RSS;
- 上来就kill -9:数据库、日志服务强杀可能坏数据,先15再9;
- 杀错进程:杀之前用
ps -p PID -o cmd确认这个PID到底是谁; - 僵尸进程杀不掉:状态
Z的僵尸要杀它的父进程,僵尸本身已经不占CPU只占PID表; - kill完又自动起来:被systemd/守护进程托管,要用
systemctl stop或它的管理命令,否则白杀。
总结
ps aux --sort=-%mem | head 或 top 按M排序找内存大户,确认PID后先用 kill(15)优雅结束,不行再 kill -9。服务类进程优先 systemctl restart,避免强杀造成数据损坏。
遇到问题加QQ23979811 协助处理
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跑满了
排查步骤:
- 用top看哪个进程CPU高
- 如果是php-fpm,看是不是有慢请求
- 如果是mysql,看是不是有慢SQL
- 杀掉异常进程
场景2:内存占满了
排查步骤:
- 用top按M排序
- 看哪个进程内存高
- 杀掉或重启
场景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
总结
记住:
- 用top实时看CPU和内存
- 按P按CPU排序,按M按内存排序
- 用ps aux --sort=-%cpu找CPU最高的
- 用kill -9 PID杀进程
- 负载超过CPU核心数就有问题
最常用:
top
ps aux --sort=-%cpu | head -10
kill -9 进程ID
遇到问题加QQ23979811 协助处理
Linux 进程管理命令
Linux 进程管理常用命令
服务器上跑了多少进程?哪个进程占内存多?怎么杀进程?这些命令必须会。
1. 查看进程
# 查看所有进程
ps aux
# 查找指定进程
ps aux | grep nginx
# 实时查看
top
2. top 命令详解
top 是最常用的进程查看工具:
- 第一行:系统负载
- 第二行:任务数
- 第三行:CPU 使用率
- 第四行:内存使用
- 第五行:Swap 使用
按 q 退出,按 k 杀进程。
3. 杀进程
# 按 PID 杀
kill 1234
# 强制杀
kill -9 1234
# 按名字杀
pkill nginx
# 杀掉所有同名进程
killall nginx
4. 查看端口占用
# 查看端口被谁占了
netstat -tlnp | grep 80
# 或者用 ss
ss -tlnp | grep 80
5. 查看进程树
# 查看进程父子关系
pstree
# 查看某个进程的子进程
pstree -p 1234
6. 后台运行
# 后台运行
nohup ./script.sh &
# 查看后台任务
jobs
# 把任务调到前台
fg %1
7. 查看资源占用
# 内存占用排行
ps aux --sort=-%mem | head
# CPU 占用排行
ps aux --sort=-%cpu | head
总结
日常运维就这几个命令:ps、top、kill、netstat、nohup。学会这些,服务器进程管理基本够用了。