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命令详解
前言
服务器变慢、网站卡顿,第一反应是看 CPU 和内存谁吃满了。top 是 Linux 自带的实时监控命令,能动态看到系统负载和每个进程的占用。本篇讲清楚 top 界面每一行含义、常用按键,以及怎么判断到底是 CPU 满还是内存满。
一、启动top
top
进入动态刷新界面,默认每3秒刷新一次,按 q 退出。
二、顶部系统信息各行含义
- 第一行:
load average三个数分别是1分钟、5分钟、15分钟平均负载,数值超过CPU核数说明忙不过来; - 第二行 Tasks:进程总数、运行中、睡眠、停止、僵尸进程数;
- 第三行 CPU:
%us用户进程占用、%sy系统内核占用、%id空闲,id接近0说明CPU紧张; - 第四行 Mem:物理内存总量、已用、空闲、缓存;
- 第五行 Swap:交换分区使用,频繁交换说明内存不足。
看核数判断负载:
nproc
# 假设2核,load average长期超过2就要警惕
三、进程列表关键列
PID进程号;%CPUCPU占用百分比;%MEM内存占用百分比;RES进程实际占用物理内存(KB);COMMAND启动命令。
四、常用交互按键
| 按键 | 作用 |
|---|---|
| P | 按CPU占用降序 |
| M | 按内存占用降序 |
| 1 | 展开每个核心单独显示 |
| k | 输入PID杀掉进程 |
| q | 退出 |
# 静态一次性输出top结果(适合脚本/采集)
top -bn1 | head -20
# 只看某个进程
top -p PID
五、判断思路
- CPU高:按P排序,找%CPU高的进程,常见是死循环PHP、爬虫、计算任务;
- 内存高:按M排序看%MEM和RES,常见内存泄漏、缓存过大;
- 负载高但CPU不高:可能是大量I/O等待或僵尸进程,配合
iostat、vmstat看; - Swap被大量使用:物理内存不够,系统把内存换到磁盘,会明显变慢。
常见坑
- 把load average绝对值当指标:要结合核数,1核负载3和8核负载3完全不同;
- 只看%CPU不看持续时间:瞬时冲高正常,持续90%以上才是问题;
- RES和SHR混淆:RES是独占物理内存,判断内存占用看RES;
- 僵尸进程多:
Z状态,父进程没回收,需要找父进程处理。
总结
top 里按P看CPU、按M看内存,先看顶部load和核数是否匹配,再定位具体进程。CPU满找%CPU高的,内存满找%MEM高的,再决定优化或kill。
遇到问题加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. 查看内存使用
# 查看内存使用情况
free -h
# 持续查看
free -h 1
输出说明:
- total:总内存
- used:已使用
- free:空闲
- buff/cache:缓存
- available:可用
2. 查看 CPU 负载
# 查看 CPU 信息
top
# 按 q 退出
top 常用快捷键:
- P:按 CPU 排序
- M:按内存排序
- 1:查看每个核心
3. 查看磁盘使用
# 查看磁盘空间
df -h
# 查看目录大小
du -sh /www/
# 查看当前目录下每个文件大小
du -sh *
4. 查看进程
# 查看所有进程
ps aux
# 查看 PHP 进程
ps aux | grep php
# 查看端口占用
netstat -tlnp
5. 查看系统信息
# 查看系统版本
cat /etc/os-release
# 查看内核版本
uname -a
# 查看 CPU 核心数
nproc
# 查看内存大小
cat /proc/meminfo | head -5
6. 查找大文件
# 查找大于100M的文件
find / -type f -size +100M
# 查找最近7天修改的文件
find /www -type f -mtime -7
7. 常用场景
网站卡了:
- top 看 CPU 和内存
- df -h 看磁盘满没满
- 看日志
内存不够用:
- free -h 看内存
- top 按 M 排序找占内存大的进程
总结
常用命令记这几个:
- 内存:free -h
- CPU:top
- 磁盘:df -h / du -sh
- 进程:ps aux
- 端口:netstat
做运维这些命令天天用,必须熟。
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 协助处理
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。学会这些,服务器进程管理基本够用了。