VPS上的快速小型静态文件服务 – 避免使用磁盘

我需要从VPS服务大量非常小的静态文件(例如1Million,〜1KB)。 我目前最喜欢的方法是Nginx,但我主要关心的是缓慢的VPS磁盘。

有没有一种方法可以用来从本地内存提供这些文件,而不是去磁盘? 我知道操作系统(Debian在这种情况下)会将“热”文件保留在内存中,但是我担心这将会很难监视或影响。 也许有办法让Nginx从内存中提供服务? 还是其他一些方法完全?

您可以将它们所在的文件夹作为tmpfs分区挂载在内存中。

例如:mount -t tmpfs -o size = 128m tmpfs / mnt / tmp

我讨厌相反,但不要这样做。 假设你使用的是Linux操作系统,操作系统在任何情况下都会将经常访问的文件caching在操作系统不太需要的内存中。 如果你试图猜测这个过程,比如像Jeroen所说的那样使用虚拟磁盘,那么你的文件需要在内存中的权利或者错误比内核可能存在的要多得多。

如果你是对的,那么你所做的就是虚拟机系统为你做的事情。

如果你错了,那么一些可能会导致你的文件移动的内存将被刷新到swap,而从swap中检索这些页面将会给你的服务器带来更多的性能负载,而不是从你的文件中检索你的文件FS会完成的。

Linux中的VM代码被紧密地调整。 它并不总是正确的,但它往往是这样做的很大一部分时间,你需要一个很好的理由来覆盖它。

我知道操作系统(在这种情况下是Debian)会将“热”文件保留在内存中,但是我担心这将会很难监视或影响。

这是真的。 你可以通过调整你的虚拟内存选项来影响这个。

在这里阅读关于swappiness。 在你的情况下将其设置为1或0:

echo 0 > /proc/sys/vm/swappiness # This will set it permanently, to continue after reboot sysctl -w vm.swappiness=1 

你可以确定你的caching压力是100或更高;

 echo 100 > /proc/sys/vm/vfs_cache_pressure # Set permanently for after restart sysctl -w vm.vfs_cache_pressure=100 

阅读关于所有这些选项和更多在这里 。

另一种select是将所有的文件放在虚拟硬盘上; 存在于VPS内存中的分区。 请参阅这里和这里的说明 。 显然,对于这个选项,请注意,重新启动时虚拟磁盘被破坏。 它将被重新创build为空,因此在启动时创build并挂载一个ramdisk,然后将文件复制到它。 不要让它们的唯一副本:)

Ramdisk是一个好主意。 您也可以获得rad ,并尝试vmtouch将目录locking到文件系统caching中。 它更加优雅,因为它可以被守护进程,并消除了非持久性RAM磁盘的问题。

 Lock all files in a directory into physical memory: vmtouch -dl /var/www/html/directory-of-small-static-files/ 

其他例子 …