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

五、常见坑

  1. 只看%MEM不看RSS:共享内存会被重复算,判断真实占用看RSS;
  2. 上来就kill -9:数据库、日志服务强杀可能坏数据,先15再9;
  3. 杀错进程:杀之前用 ps -p PID -o cmd 确认这个PID到底是谁;
  4. 僵尸进程杀不掉:状态Z的僵尸要杀它的父进程,僵尸本身已经不占CPU只占PID表;
  5. kill完又自动起来:被systemd/守护进程托管,要用 systemctl stop 或它的管理命令,否则白杀。

总结

ps aux --sort=-%mem | head 或 top 按M排序找内存大户,确认PID后先用 kill(15)优雅结束,不行再 kill -9。服务类进程优先 systemctl restart,避免强杀造成数据损坏。

遇到问题加QQ23979811 协助处理


emer 发布于  2026-10-21 07:24 

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 进程号;
  • %CPU CPU占用百分比;
  • %MEM 内存占用百分比;
  • RES 进程实际占用物理内存(KB);
  • COMMAND 启动命令。

四、常用交互按键

按键 作用
P 按CPU占用降序
M 按内存占用降序
1 展开每个核心单独显示
k 输入PID杀掉进程
q 退出
# 静态一次性输出top结果(适合脚本/采集)
top -bn1 | head -20
# 只看某个进程
top -p PID

五、判断思路

  1. CPU高:按P排序,找%CPU高的进程,常见是死循环PHP、爬虫、计算任务;
  2. 内存高:按M排序看%MEM和RES,常见内存泄漏、缓存过大;
  3. 负载高但CPU不高:可能是大量I/O等待或僵尸进程,配合 iostat、vmstat 看;
  4. Swap被大量使用:物理内存不够,系统把内存换到磁盘,会明显变慢。

常见坑

  1. 把load average绝对值当指标:要结合核数,1核负载3和8核负载3完全不同;
  2. 只看%CPU不看持续时间:瞬时冲高正常,持续90%以上才是问题;
  3. RES和SHR混淆:RES是独占物理内存,判断内存占用看RES;
  4. 僵尸进程多:Z 状态,父进程没回收,需要找父进程处理。

总结

top 里按P看CPU、按M看内存,先看顶部load和核数是否匹配,再定位具体进程。CPU满找%CPU高的,内存满找%MEM高的,再决定优化或kill。

遇到问题加QQ23979811 协助处理


emer 发布于  2026-10-20 07:28 

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 协助处理


emer 发布于  2026-10-6 07:41 

Linux查看CPU、内存负载,top命令详解

前言

服务器变慢了?网站卡了?第一反应就是看看 CPU 和内存是不是跑满了。Linux 下最常用的查看系统负载的命令就是 top,相当于 Windows 的任务管理器。但很多人打开 top 后看得一头雾水,不知道各个数字代表什么意思。本文就把 top 命令的输出详解一遍,让你一眼就能看出服务器哪里出了问题。

启动 top 命令

直接在终端输入:

top

就能看到实时的系统监控界面。按 q 键退出。

top 输出详解

top 的输出分为两部分:上面是系统整体信息,下面是各个进程的详细列表。

第一行:系统概况

top - 10:30:45 up 30 days,  2:15,  1 user,  load average: 0.50, 0.40, 0.30
  • 10:30:45:当前系统时间
  • up 30 days, 2:15:系统已经运行了30天2小时15分钟
  • 1 user:当前有1个用户登录
  • load average: 0.50, 0.40, 0.30:系统负载,分别是1分钟、5分钟、15分钟的平均负载

负载怎么看? 负载数值和 CPU 核心数有关。比如4核CPU,负载4.0才算跑满;如果负载超过 CPU 核心数的70%就需要注意了。

第二行:任务进程

Tasks: 120 total,   1 running, 119 sleeping,   0 stopped,   0 zombie
  • 120 total:总共有120个进程
  • 1 running:1个正在运行
  • 119 sleeping:119个休眠中
  • 0 stopped:0个停止
  • 0 zombie:0个僵尸进程

僵尸进程多了要注意,说明有进程没正常退出。

第三行:CPU 使用情况

%Cpu(s):  5.0 us,  2.0 sy,  0.0 ni, 92.0 id,  0.5 wa,  0.0 hi,  0.5 si,  0.0 st
  • us:用户态CPU占用百分比
  • sy:内核态CPU占用百分比
  • ni:改变过优先级的进程占用
  • id:空闲CPU百分比
  • wa:等待I/O的CPU百分比
  • hi:硬中断占用
  • si:软中断占用
  • st:被虚拟机偷走的CPU时间

重点看 us 和 id: 如果 us 很高说明用户进程占了大量CPU;如果 wa 很高说明磁盘I/O是瓶颈。

第四行:内存使用

KiB Mem :  8165036 total,  2000000 free,  4000000 used,  2165036 buff/cache
  • total:总内存
  • free:空闲内存
  • used:已用内存
  • buff/cache:缓存占用

注意: Linux 的内存管理机制和 Windows 不一样,free 很少不代表内存不够用,因为很多内存被用作缓存(buff/cache),需要的时候可以释放出来。

第五行:交换分区

KiB Swap:  2097148 total,  2097148 free,        0 used.  4000000 avail Mem
  • total:交换分区总大小
  • free:空闲交换分区
  • used:已用交换分区
  • avail Mem:可用内存(包括可回收的缓存)

如果 Swap 用了很多,说明物理内存不够用了,系统在把内存数据换到磁盘上,这时候性能会大幅下降。

进程列表

下面是各个进程的详细列表,各列含义:

PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
1234 root      20   0  100000  20000   5000 S   5.0  0.2   1:23.45 nginx
  • PID:进程ID
  • USER:进程所属用户
  • PR:进程优先级
  • NI:nice值,负值优先级高
  • VIRT:虚拟内存占用
  • RES:物理内存占用(常驻内存)
  • SHR:共享内存
  • S:进程状态(R运行/S睡眠/D不可中断睡眠/Z僵尸)
  • %CPU:CPU占用百分比
  • %MEM:内存占用百分比
  • TIME+:累计CPU时间
  • COMMAND:进程名

top 常用快捷键

在 top 界面里,可以按这些键进行交互:

按键 功能
P 按CPU占用排序(默认)
M 按内存占用排序
N 按PID排序
1 显示每个CPU核心的详细信息
k 杀掉指定PID的进程
q 退出top
h 显示帮助
d 刷新间隔时间(秒)
u 只显示指定用户的进程
c 显示完整命令行

实际排查案例

案例1:CPU 占用很高

打开 top,按 P 键按CPU排序,看哪个进程占的CPU最多。如果是某个异常进程,按 k 输入PID杀掉。

案例2:内存占用很高

按 M 键按内存排序,看哪个进程占的内存最多。如果是数据库占的内存多,那是正常的(数据库会把数据缓存到内存里)。

案例3:系统负载高但CPU不高

如果 load average 很高,但 %us 和 %sy 都不高,看看 %wa 是不是很高。如果 wa 高,说明是磁盘I/O瓶颈,CPU在等磁盘读写。

常见坑

坑1:把 buff/cache 当成已用内存

很多人看到 free 很少就慌了,觉得内存不够用。其实 Linux 把空闲内存都用来做缓存了,buff/cache 那部分是可以随时回收的。看 avail Mem 那列才是真正可用的内存。

坑2:load average 高就以为CPU不够

负载高不一定是CPU的问题。可能是磁盘I/O瓶颈(%wa高),也可能是大量进程在等待资源。要结合CPU使用率一起看。

坑3:杀进程杀错了

用 k 杀进程的时候一定要确认PID是不是对的,别把系统关键进程杀了。杀错了可能直接导致系统挂掉。

总结

top 命令是 Linux 运维最常用的监控工具,记住几个关键点:

  1. 看负载:load average,和CPU核心数对比
  2. 看CPU:%us 高说明用户进程吃CPU,%wa 高说明磁盘I/O瓶颈
  3. 看内存:看 avail Mem,不要只看 free
  4. 排序:按 P 看CPU占用,按 M 看内存占用
  5. 杀进程:按 k 输入PID

日常排查服务器问题,先打开 top 看一眼,大部分问题都能定位到方向。

遇到问题加QQ23979811 协助处理


emer 发布于  2026-10-5 07:30 
'); })();