tmpfs

作者: 欧阳_z | 来源:发表于2020-09-10 12:33 被阅读0次

    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

          本文链接:https://www.haomeiwen.com/subject/tlfpektx.html