tmpfs

1、简介
tmpfs 临时文件系统,使用的是 VM(virtual memory),也就是内存或 swap。

有时候需要快速读写文件,可以考虑使用 tmpfs ,比如期货之类的金融产品,一般把一天的开盘时间分成上午、下午、晚上 3 个部分,在开盘时间需要快速响应可以巧用tmpfs,而趁着收盘之后的休息时间,可以把 tmpfs 的文件写入磁盘,tmpfs 不具备持久性,tmpfs 中的文件被删除时会释放 VM 资源。

可以用df -hmount
grep Shmem /proc/meminfo查看 tmpfs 的相关信息。

2、测试速度
先准备一个文件:

~$ mkdir test
~$ dd if=/dev/urandom of=~/200.bin bs=1M count=200
~$ time cat ~/200.bin > ~/test/200.bin

real    0m4.147s
user    0m0.000s
sys     0m4.064s
~$ rm 200.bin

mount 之后,可以看到 df -h 中多了一行:

~$ sudo mount tmpfs /home/code/test/ -t tmpfs -o size=300M
~$ df -h
Filesystem      Size  Used Avail Use% Mounted on
...
...
tmpfs           300M     0  300M   0% /home/username/test

测试往 tmpfs目录写入一个文件的耗时,比上面快:

~$ dd if=/dev/urandom of=~/200.new.bin bs=1M count=200
~$ time cat ~/200.new.bin > ~/test/200.new.bin

real    0m1.649s
user    0m0.000s
sys     0m1.628s
~$ df -h
Filesystem      Size  Used Avail Use% Mounted on
...
...
tmpfs           300M  200M  100M  67% /home/username/test
~$ sudo umount /home/username/test
~$ rm 200.new.bin

3、及时清理
但是如果没有及时写入磁盘,不停地往 tmpfs 中写入,而 tmpfs 配置的 Size 又太大,这就导最终可用内存越来越少。

/dev/shm 默认大小为物理内存的一半,往/dev/shm写入数据,查看内存信息:

~$ dd if=/dev/urandom of=/dev/shm/200.bin bs=1M count=200

top 命令的打印中freeavail Mem减少了 200 MB。buff/cache部分增加了200 MB。因为不属于某个具体的进程,所以在进程部分中也看不出是哪个进程占用了内存,不容易被发现。

cat /proc/meminfo 中,MemFreeMemAvailable 减少了 200 MB,ShmemCachedCommitted_ASInactiveInactive(anon)增加了200 MB。

df -h/dev/shm 这行的 Used 增加了 200 MB。

$ rm /dev/shm/200.bin

删除该文件后,可以看到各项数据恢复原状了。

所以当在 top 中可用内存不多,但看不出哪个进程占用了大量内存时,可以考虑看一下 /proc/meminfo 中的 Shmem 项,和 df -htmpfsUsed 部分,确认是否因为没有及时清理 tmpfs 导致。

你可能感兴趣的:(tmpfs)