我正在管理一个 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%。
swapoff
我可以通过重新启动进程或使用and禁用和重新启用来清除交换swapon
。但是 Python 进程的交换使用将再次缓慢上升。
我想部分解释可能是,由于每晚的 cron 作业,内核将文件系统缓存的优先级高于 Python 进程。但我也猜想这些 Python 进程的内存处理中的一些软件错误可能是罪魁祸首。
一位朋友建议我购买更多 RAM,以便为文件系统缓存提供更多空间。这对我来说似乎太过分了。我想更准确地诊断交换的原因并找到一些解决问题的软件。
所以现在我将问题传递给 Serverfault - 你如何看待这种现象,我应该从这里去哪里?
不,您不需要更多 RAM,也不需要执行
swapoff
/swapon
。这是正常行为,系统检测到一些很少使用的内存页面并将它们移动到交换,以便它可以将 RAM 用于更有用的东西,例如文件缓存。