• vmtouch命令


    前段时间在dbanotes上看到一篇讲Instagram后台架构的文章,文中提到了Instagram使用的一个小命令vmtouch,觉得挺有意思的,特此推荐一下。

    先看一下vmtouch作者给的介绍:

    vmtouch is a tool for learning about and controlling the file system cache of unix and unix-like systems.

    从介绍可以看出vmtouch是一个管理和控制Unix和类Unix文件系统缓存的工具。

    vmtouch的主要功能如下:

    • 查看一个文件(或者目录)哪些部分在内存中;
    • 把文件调入内存;
    • 把文件清除出内存;
    • 把文件锁住在内存中而不被换出到磁盘上;

    由于vmtouch是个比较小众的命令,很多Linux发行版不带这个命令,所以如果要使用这个命令要自己先编译一个。

    抄了几个vmtouch的用法:

    1. 看看/bin目录有多少内容在内存中

    $ vmtouch /bin/
    Files: 92
    Directories: 1
    Resident Pages: 348/1307 1M/5M 26.6%
    Elapsed: 0.003426 seconds

    2. 看看某文件(big-dataset.txt)有多少在内存中

    How much of big-dataset.txt is currently in memory?

    $ vmtouch -v big-dataset.txt
    big-dataset.txt
    [ ] 0/42116

    Files: 1
    Directories: 0
    Resident Pages: 0/42116 0/164M 0%
    Elapsed: 0.005182 seconds

    然后读入部分文件,

    $ tail -n 10000 big-dataset.txt > /dev/null

    然后在用vmtouch查看一下:

    $ vmtouch -v big-dataset.txt
    big-dataset.txt
    [ oOOOOOOO] 4950/42116

    Files: 1
    Directories: 0
    Resident Pages: 4950/42116 19M/164M 11.8%
    Elapsed: 0.006706 seconds

    我们可以看出big-datset.txt开始时没有数据在内存中,在用tail命令读入了部分数据后,有19MB的数据进入了内存。

    3. 把文件(a.txt)清除出内存

    $ vmtouch -ve a.txt
    Evicting a.txt

    Files: 1
    Directories: 0
    Evicted Pages: 42116 (164M)
    Elapsed: 0.076824 seconds

    vmtouch主要作用是做数据的warmup,即对于将要用到的数据,通过vmtouch把它们事先读入内存,而不是在需要时再从硬盘上读入,这样可以提高系统效率。

    对于vmtouch的实现,一个核心的函数是mincore(), 看一下它的manual:

    mincore - determine whether pages are resident in memory

           #include <unistd.h>
           #include <sys/mman.h>

           int mincore(void *addr, size_t length, unsigned char *vec)

    mincore()需要调用者传入文件的地址(通常由mmap()返回),它会把文件在内存中的情况写在vec中。

  • 相关阅读:
    JS缓存图片实例
    Windows Server 2008上安装Media Player
    [转] BizTalk Server 2010新功能介绍(一):概述
    Microsoft BizTalk ESB Toolkit 2.0
    Asp.NET导出Excel文件乱码解决若干方法
    [PM Tools]软件项目进度跟踪表v3.0
    关于Silverlight中多项目共享DLL文件的讨论
    Silverlight中的ListBox横向显示CheckBox
    设计模式.简单工厂
    Silverlight用户控件转移时产生的“元素已经是另一个元素的子元素”问题
  • 原文地址:https://www.cnblogs.com/coldplayerest/p/2371881.html
Copyright © 2020-2023  润新知