什么东西占用了我的内存?

什么东西占用了我的内存?

我正在尝试弄清楚是什么占用了我的 Linux(ubuntu 20.04)服务器上的内存。

重启后不久,htop 显示以下内容:

顶部

这表明当前正在使用 17 GB 的内存。在我重新启动之前,它显示为 29.6 GB,并且计算机似乎运行缓慢。htop 窗口按内存排序,使用率最高的进程使用了​​ 0.6% 的内存。

另一个问题建议使用此命令:

ps -e -orss=,args= | sort -b -k1,1n

使用率最高的进程报告 209596 千字节(?)的内存,因此再次占用可用 RAM 的一小部分。

我尝试了一个相当神秘的命令来将该命令报告的第一列中的所有数字加起来ps

ps -e -orss=,args= | sort -b -k1,1n | sed 's/^ \+//' | cut -d \  -f 1 | sed '2,$s/$/+/' | sed '$s/$/p/' | dc

报告称总使用量为 2965816 千字节(?),(假设我的千字节假设正确)小于 3 GB,那么另外 14 GB 去哪儿了?

有人可以帮忙吗?

答案1

是的 - 这给我带来麻烦吗?

这不会造成问题。这是预期的行为。ZFS 最初不是为 Linux 设计的。它有自己的缓存系统(称为 ARC,自适应替换缓存)。在 Linux 上,分配给此缓存的内存被视为“正在使用”,即使它会在内存压力上升时被释放,就像常规文件系统缓存一样。默认的最大 ARC 大小是物理内存的 50%。

在现代版本htop(3+) 中,您可以打开 ARC 状态显示:

htop 3 zfs 状态

该屏幕截图来自具有 8 GiB 内存的系统。

答案2

ZFS 具有基于 RAM 的磁盘缓存,它与常规 Linux 磁盘缓存是分开的。这与 ZFS 的非 Linux 起源有关。此 ZFS 内存缓存称为自适应替换缓存或 ARC。由于这种分离,ZFS ARC 在 Linux 中显示为“已使用”内存,而不是“缓存”,就像您对本机文件系统(例如 EXT4)所期望的那样。这就是许多刚接触 ZFS 的人担心 RAM 使用情况的原因,但没什么可担心的。除非您正在处理重复数据删除(您可能不会,也不应该这样做),否则内存对 ZFS 来说并不是一个大问题,这与许多人告诉您的相反。

您看到此磁盘缓存(以及内存)已填满,因为您正在移动(即读取)大量数据。ARC 的默认内存限制通常是 RAM 的 50%,但如果您希望设置最大值,则可以通过 zfs 内核模块参数“zfs_arc_max”进行配置。如果可用内存变得稀缺,ZFS 将释放部分 ARC,就像 Linux 的常规磁盘缓存一样。同样,没有什么可担心的;未使用的 RAM 是浪费的 RAM。

--亨克·阿切特帕德

相关内容