你可能已经知道读取内存中的文件比读取在硬盘中的文件要快得多,并且能降低你的磁盘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
... 并添加下面内容
[...] |