Linux查看进程占用内存最高,kill进程方法
前言
服务器内存用满了,不知道哪个进程占的?找到之后怎么杀掉?本文就讲一下怎么查看占用内存最高的进程,以及怎么 kill 掉。
查看内存占用
top 命令(最常用)
top
打开后默认按 CPU 排序,按 M 键(大写)就会按内存排序。
输出里重点看:
PID:进程号USER:运行用户%MEM:内存占用百分比RES:实际用的物理内存(KB)
按 q 退出。
ps 命令
一行命令直接看内存占用前 10:
ps aux --sort=-%mem | head -10
输出按内存从大到小排,前 10 个就是最占内存的。
只看进程名和 PID
ps aux --sort=-%mem | head -10 | awk '{print $2, $11}'
只显示 PID 和进程名,更简洁。
kill 杀掉进程
kill 命令
先从 top 或 ps 里找到进程 PID,然后:
kill 进程号
比如杀掉 PID 为 1234 的进程:
kill 1234
kill -9 强制杀
有时候 kill 没用,进程就是不死,用 -9 强制杀:
kill -9 1234
注意: -9 是强杀,进程没机会清理资源,可能导致数据丢失。尽量先试普通 kill,不行再 -9。
pkill 按名字杀
不用找 PID,直接按进程名杀:
pkill nginx
杀掉所有叫 nginx 的进程。
killall 杀同名进程
killall nginx
和 pkill 类似,也是按名字杀。
常用操作示例
找出最占内存的进程并杀掉
# 找前5个最占内存的
ps aux --sort=-%mem | head -5
# 假设 PID 是 1234,杀掉
kill 1234
杀掉所有 php-fpm 进程
pkill php-fpm
杀掉某个用户的所有进程
pkill -u www
常见坑
坑1:杀错进程了
把系统关键进程杀了,服务器直接挂。
解决: 杀之前先确认一下这个进程是干嘛的:
ps -p 进程号 -o comm=
或者:
ls -l /proc/进程号/exe
坑2:kill 了进程又自动起来了
杀掉之后过几秒又自动启动了。
原因: 有服务管理工具(systemd、supervisor)在监控,挂了就自动拉起。
解决: 先停服务再杀:
systemctl stop nginx
或者:
supervisorctl stop nginx
坑3:kill 没权限
普通用户杀不了 root 启动的进程。
解决: 加 sudo 或切 root:
sudo kill 1234
总结
| 命令 | 作用 |
|---|---|
top |
实时看进程,按 M 按内存排序 |
ps aux --sort=-%mem |
按内存排序看进程 |
kill 进程号 |
正常杀进程 |
kill -9 进程号 |
强制杀进程 |
pkill 进程名 |
按名字杀进程 |
killall 进程名 |
杀同名所有进程 |
服务器内存爆了就用 top 按 M 排序,找到最占内存的杀掉就行。
遇到问题加QQ23979811 协助处理