使用tmpfs将文件/目录存储在内存中

你可能已经知道读取内存中的文件比读取在硬盘中的文件要快得多,并且能降低你的磁盘I/O。这篇文章就将告诉你如何在tmpfs(一个创建内存设备的文件系统)的帮助下将你的文件存储在内存而不是硬盘中。对于文件缓存和临时数据(如在PHP中使用session.save_andler=files时的线程)来说,这是一种理想的方法,因为当你关机或者重启系统后数据就会自动清空。

本文并不提供任何保障是否适合你。

使用 tmpfs

.每个Linux系统下都有一个标准内存设备(除了一些虚拟机 - 取决于虚拟技术) - /dev/shm

当你运行

mount

你应该能看到一些类似下面的信息

tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev)

默认情况下,大约是系统内存大小的一半(你可以通过运行df -h /dev/shm来查看实际大小) - 所以如果你有4GB的内存,那么显示大小应该是2GB左右。

你可以使用/dev/shm来把它当作一个常规的硬盘,例如,你可以直接copy一个文件进去:

cp -af test.tar.gz /dev/shm/

文件现在存储在内存中了:

ls -la /dev/shm/

server1:/# ls -la /dev/shm/
total 316
drwxrwxrwt 18 root root    380 2008-11-27 16:06 .
drwxr-xr-x 12 root root   3780 2008-11-27 15:33 ..
-rw-r--r--  1 root root 311636 2003-04-02 20:00 test.tar.gz
server1:/#

(请记住在你关机或重启系统后文件就会丢失!)

如果需要,你可以重新调整/dev/shm的大小,如下例所示:

mount -o remount,size=3G /dev/shm

(注意 - 如果你把/dev/shm调整的太大并且使用了全部的空间,然后只有少量的内存留下来供系统使用。这可能会造成任何你不想看到的系统问题)

现在让我们假设你想为你在大流量网站在/var/www/www.example.com/cache目录下创建几种文件缓存。当然,把缓存放在内存中是件好事。下面是如何操作:

首先,创建缓存目录:

mkdir -p /var/www/www.example.cache

(如果你的缓存需要,你可以更改目录的属主,例如:

chown proxy:proxy /var/www/www.example.com/cache)

现在我们把这个目录加载到内存设备中(使用100MB大小,并且权限为755):

mount -t tmpfs -o size=100M,mode=0755 tmpfs /var/www/www.example.com/cache

观察一下:

mount

... 你会看到这些:

tmpfs on /var/www/www.example.com/cache type tmpfs (rw,size=100M,mode=0755)

就是这个了 - 现在你可以直接在内存中缓存这些文件了。

如果你想在系统启动时自动缓存这个目录,编辑/etc/fstab...

vi /etc/fstab

... 并添加下面内容

[...]
tmpfs /var/www/www.example.com/cache tmpfs size=100M,mode=0755 0 0
[...

链接

原文地址:https://www.cnblogs.com/Jayan/p/1350337.html