1、简介
tmpfs
临时文件系统,使用的是 VM(virtual memory),也就是内存或 swap。
有时候需要快速读写文件,可以考虑使用 tmpfs
,比如期货之类的金融产品,一般把一天的开盘时间分成上午、下午、晚上 3 个部分,在开盘时间需要快速响应可以巧用tmpfs
,而趁着收盘之后的休息时间,可以把 tmpfs
的文件写入磁盘,tmpfs
不具备持久性,tmpfs
中的文件被删除时会释放 VM 资源。
可以用df -h
、mount
和
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
命令的打印中free
和avail Mem
减少了 200 MB。buff/cache
部分增加了200 MB。因为不属于某个具体的进程,所以在进程部分中也看不出是哪个进程占用了内存,不容易被发现。
在 cat /proc/meminfo
中,MemFree
和MemAvailable
减少了 200 MB,Shmem
、Cached
、Committed_AS
、 Inactive
、Inactive(anon)
增加了200 MB。
在 df -h
的 /dev/shm
这行的 Used
增加了 200 MB。
$ rm /dev/shm/200.bin
删除该文件后,可以看到各项数据恢复原状了。
所以当在 top
中可用内存不多,但看不出哪个进程占用了大量内存时,可以考虑看一下 /proc/meminfo
中的 Shmem
项,和 df -h
中 tmpfs
的 Used
部分,确认是否因为没有及时清理 tmpfs
导致。
网友评论