我的交换服务器有大约 80GB 的可用 RAM,是否还需要更多?

我的交换服务器有大约 80GB 的可用 RAM,是否还需要更多?

我正在管理一个 Debian Linux x86_64 服务器,它有 125GB RAM、10GB 交换分区和 60 的交换值。

输出free -gw打印:

              total        used        free      shared     buffers       cache   available
Mem:            125          20           1          25           0         103          78
Swap:             9           1           7

每天晚上,都会运行一个 cron 作业,该作业对磁盘 R/W 要求非常高,并且在执行期间会使使用的内存增加 2GB,然后再返回到 ~20GB。

在同一时间范围内,某些长时间运行的容器化 Python 进程(尤其是 gunicorn)被分页。

随着时间的推移,这些进程将逐渐填满交换 - 几周后,它将达到 99% 满。

我可以通过重新启动进程或使用 和 禁用并重新启用来清除交换swapoffswapon但 Python 进程的交换使用量将再次缓慢上升。

我猜部分原因可能是,由于夜间 cron 作业,内核将文件系统缓存的优先级设定得比 Python 进程高。但我还猜想,这些 Python 进程的内存处理中存在一些软件错误,这可能是罪魁祸首。

一位朋友建议我购买更多 RAM,以便为文件系统缓存留出更多空间。这对我来说似乎有点过分。我想更准确地诊断交换的原因并找到一些软件解决方案。

所以现在我将问题转交给 Serverfault——您如何看待这种现象,我应该怎么做?

答案1

不,您不需要更多 RAM,也不需要执行swapoff/ swapon。这是正常行为,系统会检测一些很少使用的内存页面并将它们移动到交换区,以便可以使用 RAM 执行更有用的事情,例如文件缓存。

相关内容