因此,我的朋友说交换是一个老概念,只要有足够的 RAM,在新系统上就不需要交换。但后来我听到有人建议,在 Linux 甚至 Unix 上使用 Postgres 时可能确实需要交换,因为malloc
/free
不会将内存返回给系统。我被告知这是一个功能,而不是错误,我应该使用交换,因为系统将使用交换来释放内存……这是正确的还是我遗漏了什么?有人可以确认这一点并可能对此提供更多解释吗?
我的背景设置:
- PGSQL 配置:
shared_buffers
+(temp_buffers
+work_mem
)*max_connections
= 20 GB; - PGSQL 是版本 16,服务器在 Ubuntu 22 上。
- 该服务器有 50 GB 的 RAM 和 0 个交换空间。ZFS ARC 的最大容量为 8 GB。
- 事实上,几个小时后就超过了 20 GB。
- 我每天都会看到 RAM 使用量有所增加。5-7 天内达到 50 GB(PGSQL 重启时降至 0)。
这就是背景。本质上,问题是:我是否需要或应该为带有 Postgres 服务器的 VM 进行交换?
实际上,拥有一些交换空间更为安全,这样当系统耗尽物理内存时,系统将减速,而不是立即终止进程。简而言之,在现代系统中,交换空间是一种您可能永远不需要的保险。
您可以在此处找到类似的、包含许多论点的讨论:
https://community.nethserver.org/t/linux-swap-needed-or-not/23655