将 tmpfs 增加到超过物理内存有多安全?

将 tmpfs 增加到超过物理内存有多安全?

我的服务器有 2GB RAM 和 120GB SSD,以及一些用于存储的 RAID 阵列。操作系统是 Debian 8 (Linux 3.16)。

我有一个 MySQL 密集型应用程序,它有tmpdir= /run/mysqld,它是tmpfs由 Debian 通过以下方式配置的/etc/default/tmpfs

# Size limits.  Please see tmpfs(5) for details on how to configure
# tmpfs size limits.
TMPFS_SIZE=40%VM

以前是这样20%VM,大约是384M。我遇到了几个no space left on device,所以我把它增加到了40%VM,但即使有大约763M,它仍然太小了。

现在我应该添加更多内存,但出于好奇,我想知道这里的限制。

  • /dev/sdd1安装在/有大约 50GB 可用空间,并且速度相当快(三星 850 EVO SSD)
  • /dev/sdd5是我的交换分区,它是3.7G(fdisk类型ID是82)
  • TMPFS_SIZE设置为40%VM,含义/run为 763M

现在我知道 tmpfs 可以交换,这对我来说很好。我希望MySQL尽可能写入RAM,但如果它需要更多内存,我可以允许系统将其交换到SSD上。

因此,通过我的设置,我可以推动/run

  • 300M大?是的。这是默认的。
  • 1.5GB大吗?是的,经过尝试,MySQL 使用了高达 1.3GB 的空间,并且系统运行得非常顺利。但这仍然不到物理内存+交换分区的一半。
  • 2.5GB大吗?这比物理内存多,但不到物理内存+我的交换分区的一半。
  • 4GB大吗?这将紧密适合一半物理+交换
  • 更多的?比如10GB?它可以使用可用空间来/交换更多吗?

我猜安全的经验法则是TMPFS_SIZE不大于交换+一半物理内存。我可以在不增加交换分区的情况下超越这个范围吗?

另外,可以放进200%VM去吗/etc/default/tmpfs?我读了tmpfs(5)不知道我是否可以对此投入>100%。

最后,我应该进去/etc/fstab而不碰吗/etc/default/tmpfs

(据我所知,我只用过mount -o remount,我还没有重新启动服务器)

编辑:对于最后一个问题,我知道它可以/可能会被修改/etc/fstab(请参阅下面来自手册页的引用),但是我想知道最佳实践,因为到目前为止我从未接触过任何东西/etc/default

通过在 /etc/fstab 中创建合适的条目,可以使用更复杂的安装选项。

答案1

我想我可以测试一下,所以我跑了:

sudo mount -o remount,size=2800M /run

工作起来就像一个魅力:

Filesystem      Size  Used Avail Use% Mounted on
tmpfs           2.8G   45M  2.7G   2% /run

所以我稍微补充了一下:

fallocate -l 1G /run/test.img
fallocate -l 1G /run/test2.img
fallocate -l 500M /run/test3.img

结果:

Filesystem      Size  Used Avail Use% Mounted on
tmpfs           2.8G  2.6G  208M  93% /run

系统仍然启动并运行。掉期可用性下降,这证明它已被使用:

交换可用性下降

  • 17:10:创建 2.5 GB 的文件/run
  • 17:20:删除500M文件

总交换量会减少 所占用的金额/run

我会在虚拟机上测试 10GB,因为我不知道内核是否会拒绝重新安装或只是出现意外行为。

我仍在寻找实际的答案,但务实的方式表明它是有效的。

相关内容