由于某种原因,我的存储服务器总是占用大量内存,但这种情况只会持续到有限的程度,在我看来还不算严重。
我的存储服务器是一台自制服务器,使用英特尔至强 e5-1620 32GB ram ddr4 ecc reg 4x segate 10TB hdd exos 驱动器 -> 使用 zfs 的 raid5
正在运行的服务:zfs samba prometheus 和用于 grafana 监控的节点导出器。我的服务器正在运行 ubuntu server 18.04.4
当我重新启动服务器时,它使用了大约 800MB,而此时此刻,它使用了大约 16GB,这要多得多,我已经重新安装了操作系统以避免出现任何问题。
我有 2 张系统监控和 htop 的截图。顺便说一下,在 htop 中,我在列表中看到了 10 次进程,这是针对每个核心的吗?-> 如果不是,为什么呢?
答案1
ZFS 使用自己的缓存,称为 ARC,而不是常规的 Linux 页面缓存。这在 top 中不会显示为“缓存”,但它的工作方式与常规缓存一样,因为它会在内存压力下释放。这就是为什么你会看到内存“丢失”。如果你这样做
echo 3 > /proc/sys/vm/drop_caches
您会发现所有内存都恢复了(然后磁盘读取速度会再次变慢,直到缓存预热起来。默认情况下,ZFS ARC 限制在检测到的内存的 50%,这就是为什么您会看到内存使用率稳定在 16-17GB 左右。
关于你的第二个问题,许多程序都不是单线程的,有些程序会分叉多个线程,有些程序会分叉多个进程。有些内核进程每个 CPU 线程都有一个单独的实例。这就是为什么你会看到某些进程有多个实例。