将tmpfs增加到大于物理内存的安全性如何?


11

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

我有一个MySQL密集型应用程序,它具有tmpdir= /run/mysqldtmpfs由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,它仍然太小。

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

  • /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不要大于swap +一半的物理内存。我可以在不增加交换分区的情况下超越此范围吗?

另外,可以放进200%VM/etc/default/tmpfs吗?我读过的书tmpfs(5)不知道我是否可以在这上面投入100%以上的费用。

最后,我应该改/etc/fstab而别碰/etc/default/tmpfs吗?

(据了解,我仅使用来完成此操作mount -o remount,但尚未重启服务器)

编辑:对于最后一个问题,我知道可以/可以对其进行修改/etc/fstab(请参见手册页下面的报价),但是我想知道最佳实践,因为/etc/default到目前为止我从未接触过任何东西。

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


有趣的问题。我想这也可能与内存过量使用设置有很大关系。
phk 2015年

看来最大的tmpfs大小将是物理+交换。我已经在内核文档中看到了这一点。
Benoit Duffez,

Answers:


8

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

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

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

我仍在寻找实际的答案,但务实的方式表明它可行。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.