Linux · 29 3 月, 2026 0

Htop内存怎么看?Linux内存与Swap使用的完整解析

前言

很多人第一次用 htop 时都会被吓到:
明明系统还有大量可用内存,Swap 却已经被使用;或者看到绿色、黄色、蓝色的内存条,却不知道它们分别代表什么。
本文将从工程师视角,带你彻底理解 Linux 的内存管理机制,并教你如何正确解读 htop。


🧩 1. 为什么 htop 显示“内存占用很高”?

Linux 的内存管理理念是:

空闲内存是浪费的内存。

因此 Linux 会主动把空闲内存用于:

  • 文件缓存(cache)
  • 程序运行时的缓冲区(buffers)
  • 页缓存(page cache)

这些缓存会在需要时立即释放,所以不是“真正的占用”


🟦 2. htop 内存条的颜色含义

在 htop 中,内存条通常由四种颜色组成:

颜色 含义 是否算“真正占用”?
绿色 程序实际使用的内存(RSS) ✔ 是
蓝色 缓冲区(buffers) ✘ 否
黄色 文件缓存(cache) ✘ 否
橙色/粉色 内核 slab 缓存
Docker活跃时可能出现
✔ 是(但可回收)

只有绿色部分才是真正的内存占用。


🟧 3. Swap 为什么会被使用?

你可能看到这样的情况:

  • 内存还有 900MB 可用
  • Swap 却用了 600MB

这其实是正常现象。

✔ Linux 会把“长期不活跃的内存页”放到 Swap

例如:

  • 很久没用的后台程序
  • 不常访问的库
  • 冷数据

这样做可以:

  • 让更多内存用于缓存,提高系统速度
  • 避免真正的内存压力时才紧急换页

❗ Swap 被使用 ≠ 内存不够

只有当:

  • Swap 持续增长
  • 系统变卡
  • si/so(swap in/out)很高

才说明内存压力大。


🟩 4. 如何判断系统是否真的内存不足?

✔ 看 htop 的绿色部分是否接近满

绿色接近 100% 才说明内存真的不够。

✔ 看是否有频繁的 swap in/out

vmstat 1

如果 siso 长期为 0,说明 Swap 使用是“静态的”,不影响性能。

✔ 看 dmesg 是否出现 OOM

dmesg | grep -i oom

如果没有 OOM 记录,说明系统没有因为内存不足杀进程。


🔍 5. 如何查看 Docker 容器的内存占用?

如果你在用 Docker,可以这样查看:

✔ 实时查看所有容器

docker stats

✔ 查看单个容器的详细内存信息

docker inspect <容器名> | grep -i memory

✔ 查看 cgroup 的真实内存使用

cat /sys/fs/cgroup/memory/docker/<容器ID>/memory.usage_in_bytes

🧠 6. 如何优化内存与 Swap?

✔ 调整 swappiness(减少 Swap 使用)

sudo sysctl vm.swappiness=10

✔ 清理缓存(不推荐频繁使用)

sudo sync
sudo echo 3 > /proc/sys/vm/drop_caches

✔ 给 Docker 容器设置内存限制

docker run -m 512m --memory-swap=1g ...

🎯 总结

htop 中的内存条并不是“越满越糟糕”。
Linux 会主动利用空闲内存做缓存,而 Swap 的使用也不一定代表内存不足。
真正需要关注的是:

  • 绿色部分是否接近满
  • 是否频繁 swap in/out
  • 是否出现 OOM
  • 容器是否设置了合理的内存限制

理解这些,你就能正确判断系统的内存状态,避免误判和不必要的优化。