文章内容

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(用户)、%CPUCOMMAND(命令名)。

经过检查是由于占用了大量的 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极度紧张(随时触发内核回收)
Swap0 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

结果如下:

✅ 二、让 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

分享到:

发表评论

评论列表