文章内容
2025/11/12 20:09:11,作 者: 黄兵
Ubuntu 24.04 CPU 占用 100% 的诊断与解决方法
在 Ubuntu 24.04 中,当服务器 CPU 占用 100% 时,可以用以下几种方法快速找出“哪个程序”在占用 CPU:
✅ 一、快速查看占用最高的进程
1️⃣ 使用 top
top
进入交互界面后:
-
默认按 CPU 占用率 排序;
-
查看
%CPU一列; -
按
P可手动按 CPU 占用排序; -
按
q退出。
重点关注
PID(进程号)、USER(用户)、%CPU、COMMAND(命令名)。
经过检查是由于占用了大量的 CPU 资源:
在 Ubuntu(或其他 Linux)上看到 kswapd0 占用大量 CPU,这是一个非常典型的系统内核内存问题信号。
🧠 一、kswapd0 是什么?
kswapd0 是 Linux 内核的“页面交换守护进程”(Kernel Swap Daemon)。
它的主要职责是:
当系统内存不足时,
kswapd0会尝试把一部分内存页从 RAM 交换(swap)到磁盘,以释放可用内存。
也就是说,它是内存管理的后台线程,属于内核(不是用户进程),PID 通常较小,例如:
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 51 root 20 0 0 0 0 R 95.0 0.0 1:34.21 kswapd0
⚠️ 二、当 kswapd0 占用高 CPU,说明了什么?
高 CPU 的 kswapd0 不是问题本身,而是症状。
它表示系统内存紧张、频繁换页或回收页失败。
常见原因如下:
| 原因 | 说明 |
|---|---|
| 🧩 可用内存太少 | 系统物理内存不足,内核不停回收页面。 |
| 🧨 某程序内存泄漏 | 某进程(如 Java、Python)不断吃内存,导致频繁换页。 |
| 🧱 swap 空间太小或太慢 | 没有启用 swap,或 swap 在机械盘上太慢。 |
| 🐌 I/O 或 cache 异常 | 文件缓存占满、I/O 设备性能瓶颈,导致页面回收慢。 |
🔍 三、诊断步骤
1️⃣ 查看总体内存使用情况
free -h
关注:
Mem: 一行的 available
Swap: 一行的 used
结果如下:

服务器目前状态如下:
项目 值 说明 物理内存总量 1.9 GiB 你的 VPS 内存总共只有 2 GB 已用内存 1.8 GiB 几乎全部被占用 可用内存 52 MiB 极度紧张(随时触发内核回收) Swap 0 B 没有配置交换空间
关注:
Mem:一行的availableSwap:一行的used
结果如下:

服务器目前状态如下:
| 项目 | 值 | 说明 |
|---|---|---|
| 物理内存总量 | 1.9 GiB | 你的 VPS 内存总共只有 2 GB |
| 已用内存 | 1.8 GiB | 几乎全部被占用 |
| 可用内存 | 52 MiB | 极度紧张(随时触发内核回收) |
| Swap | 0 B | 没有配置交换空间 |
🧩 问题结论
你的 kswapd0 占用 CPU 过高的原因非常明确:
🧠 系统内存完全耗尽,但没有启用 swap,导致内核反复尝试回收页面(page reclaim),形成 “假交换循环”,CPU 被 kswapd0 拉满。
这不是 kswapd0 出错,而是 系统在拼命救内存。
|
你的
这不是 |
💡 解决方案(立刻可执行)
✅ 一、添加 2 ~ 4 GB 的 swap
推荐 4 GB:
sudo fallocate -l 4G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
验证是否启用:
swapon --show
结果如下:

推荐 4 GB: sudo fallocate -l 4G /swapfile sudo chmod 600 /swapfile sudo mkswap /swapfile sudo swapon /swapfile 验证是否启用: swapon --show 结果如下:
|
✅ 二、让 swap 永久生效
编辑 /etc/fstab:
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
✅ 三、降低内核的换页倾向(防止频繁使用 swap)
sudo sysctl vm.swappiness=10
echo 'vm.swappiness=10' | sudo tee -a /etc/sysctl.conf
编辑 echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab ✅ 三、降低内核的换页倾向(防止频繁使用 swap) sudo sysctl vm.swappiness=10 echo 'vm.swappiness=10' | sudo tee -a /etc/sysctl.conf |

评论列表