使用 tmpfs 时如何正确猜测交换分区的大小?

使用 tmpfs 时如何正确猜测交换分区的大小?

我有一个 SSD,所以空间是一种稀缺资源。我想尽可能少地使用交换分区。事实上,去年我完全没有使用交换分区(计算机有 6 GB RAM)。

我计划重新安装,并想尝试一些新事物。其中,我想通过将写入繁重的系统目录放在 tmpfs 上来减少 SSD 上的写入负载。具体来说,我想将/tmp/var/tamp/var/tmp/cache放在 RAM 中。显然,这会增加我的 RAM 使用率,而且在某个时候,我可能毕竟需要交换。

我以前没有记录过临时目录大小和 RAM 使用情况,也不想安装记录工具,等到收集到足够的数据后再重新安装。对于合适的交换分区大小,我最好的选择是什么?这样的猜测有多合理?我是不是只能盲目猜测,还是只能依赖“1.5 倍 RAM 大小”之类的过于宽容的指导原则?

我每晚都会完全关机,所以我希望临时目录不会变得太大。

答案1

当谈到交换空间时,您有三个问题。

首先,如果交换空间不足,某些工作负载就无法执行。如果某个程序需要的内存多于可用的物理 RAM,那么没有交换空间它就无法运行。

其次,如果交换空间非常小,您的计算机可能无法从物理 RAM 中清除从未访问过的内容。通常,某些内存块永远不会被访问,但操作系统无法证明这一点。因此它不能直接释放内存。如果没有足够的交换空间,这些信息将永远滞留在 RAM 中,永远不会被访问。许多进程在启动时会弄脏一堆它们从未接触过的内存。

最后,如果交换空间非常小,您是否决定过度使用 VM 可能会产生严重后果。如果您不允许系统过度使用 VM,那么您最终会拒绝实际上不会使用太多内存的操作。(想象一下,如果一个大型进程调用fork。它可能即将调用exec,但除非您允许过度使用,否则如果操作系统fork没有足够的 RAM+交换空间供新进程弄脏每个可写映射页面,则它必须拒绝。)如果您确实允许系统过度使用,并且您实际上没有足够的 RAM+交换空间来处理非典型工作负载,您可能会发现进程被毫不客气地终止。

就我个人而言,假设典型使用情况,我会分配 2GB 用于交换,并确保允许合理的过度承诺

答案2

如果您没有执行任何内存密集型任务,那么具有 6G RAM 的计算机可以不用交换(警告:我疯了)。

将 /tmp (其 /var 同级) 挂载为 tmpfs 是一种非常好的做法。对于我的上网本,它有 1G RAM,没有交换,保留 100M /tmp tmpfs 从未出现问题(除非您想从那里提取缓存之类的东西,而人们通常不想要这些)。

如果出现任何问题,您只需编辑 /etc/fstab 。

偏执是好的,但丢失数据的可能性较小,因为只有 tmp/cache 目录在内存中,实际数据无论如何都会写入磁盘。

相关内容