我的服务器有 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,因为我不知道内核是否会拒绝重新安装或只是出现意外行为。
我仍在寻找实际的答案,但务实的方式表明它是有效的。