Linux 用户可能经常遇到的一个问题是,机器有 16GB 内存之多,运行的进程也不多,但是剩下的 free 内存并不多,大部分都被 buff 和 cache 占用了(比如下面我的 PC)。

$ free -h

total used free shared buff/cache available

Mem: 15G 6.4G 2.3G 1.1G 6.9G 7.7G

Swap: 975M 268K 975M

虽然对于 Linux 的内存分配机制来说,这种被 buff 和 cache 占用的内存在系统需要时会及时释放出来,但是有时候我们想知道到底 cache 了些什么却没有一个好的办法。

前几天看到有个人用 go 写了个 pcstat,可以查看某个文件是否被缓存(作者的目的是数据库调优),也可以根据进程的 PID 来查看都缓存了哪些文件,不过该工具不能查看整个操作系统都 cache 了哪些文件。

因此,我基于 pcstat 写了个hcache,增加了查看当前操作系统所 cache 的前若干个文件的特性。如果有什么建议的话也欢迎反馈给我:hubottle@gmail.com 。

使用方法比较简单:

$ sudo hcache --top 10

[sudo] password for silenceshell:

+----------------------------------------------------------------------------------+----------------+------------+-----------+---------+

| Name | Size (bytes) | Pages | Cached | Percent |

|----------------------------------------------------------------------------------+----------------+------------+-----------+---------|

| /opt/google/chrome/chrome | 114911208 | 28055 | 25457 | 090.740 |

| /usr/share/code/code | 67688720 | 16526 | 12274 | 074.271 |

| /home/silenceshell/Software/pycharm-community-2016.2/lib/pycharm.jar | 95177431 | 23237 | 11325 | 048.737 |

| /opt/atom/atom | 62641344 | 15294 | 10578 | 069.164 |

| /usr/bin/dockerd | 39121168 | 9552 | 7103 | 074.361 |

| /home/silenceshell/Software/pycharm-community-2016.2/jre/jre/lib/amd64/libjfxwebkit.so | 57455824 | 14028 | 6625 | 047.227 |

| /usr/lib/x86_64-linux-gnu/libQtWebKit.so.4.10.2 | 36462184 | 8902 | 6316 | 070.950 |

| /usr/lib/beyondcompare/BCompare | 30640160 | 7481 | 5505 | 073.586 |

| /usr/bin/SecureCRT | 29524560 | 7209 | 4806 | 066.667 |

| /usr/share/code/libnode.so | 21135976 | 5161 | 4588 | 088.898 |

+---------------------------------------------------------------------

让我们来查看一下其中列出的一个文件:

$ lsof /usr/lib/x86_64-linux-gnu/libQtWebKit.so.4.10.2

COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME

quiterss 20630 silenceshell mem REG 8,5 36462184 3936610 /usr/lib/x86_64-linux-gnu/libQtWebKit.so.4.10.2

默认情况下会显示 cache 的文件的全路径,会比较长,也可以使用--bname选项来仅显示文件名:

-------------+----------------+------------+-----------+---------+

$ sudo ./hcache --top 3 --bname

+-------------+----------------+------------+-----------+---------+

| Name | Size (bytes) | Pages | Cached | Percent |

|-------------+----------------+------------+-----------+---------|

| chrome | 114911208 | 28055 | 25476 | 090.807 |

| pycharm.jar | 95177431 | 23237 | 11479 | 049.400 |

| atom | 62641344 | 15294 | 10578 | 069.164 |

+-------------+----------------+------------+-----------+---------+

这个小工具的源码开源在 Github上:hcache,欢迎关注和提交 issue 及 PR。

linux 文件缓冲区,如何查看 Linux 当前缓存了哪些大文件?相关推荐

  1. 在win10查看本机linux的文件,Windows 10变身开发者利器:内置Linux内核,轻松查看Linux子系统文件...

    原标题:Windows 10变身开发者利器:内置Linux内核,轻松查看Linux子系统文件 来源:创事记 终于!在Windows里可以访问Linux文件了. 这表明,微软插入开源界的触角,越来越深入 ...

  2. 【Linux 内核 内存管理】Linux 内核内存布局 ① ( 查看 Linux 操作系统位数 | 查看 Linux 操作系统软硬件信息 )

    文章目录 一.查看 Linux 操作系统位数 二.查看 Linux 操作系统软硬件信息 一.查看 Linux 操作系统位数 在 646464 位的 Linux 中 , 使用 484848 位 表示 & ...

  3. linux家用系统版本,查看linux系统版本

    篇一:linux下如何查看系统和内核版本 linux下如何查看系统和内核版本 1. 查看内核版本命令: 1) [root@q1test01 ~]# cat /proc/version Linux ve ...

  4. 【Linux开发】如何查看Linux kernel的内置模块驱动列表和进程ID

    [Linux开发]如何查看Linux kernel的内置模块驱动列表和进程ID 标签:[Linux开发] 命令: cat /lib/modules/$(uname -r)/modules.builti ...

  5. node 生产的env文件怎么注入_前端各种文件上传攻略,从小图片到大文件断点续传...

    写在前面 今年国庆假期终于可以憋在家里了不用出门了,不用出去看后脑了,真的是一种享受.这么好的光阴怎么浪费,睡觉.吃饭.打豆豆这怎么可能(耍多了也烦),完全不符合我们程序员的作风,赶紧起来把文章写完. ...

  6. 写给新手前端的各种文件上传攻略,从小图片到大文件断点续传

    写在前面 今年国庆假期终于可以憋在家里了不用出门了,不用出去看后脑了,真的是一种享受.这么好的光阴怎么浪费,睡觉.吃饭.打豆豆这怎么可能(耍多了也烦),完全不符合我们程序员的作风,赶紧起来把文章写完. ...

  7. 前端各种文件上传攻略,从小图片到大文件断点续传

    写在前面 今年国庆假期终于可以憋在家里了不用出门了,不用出去看后脑了,真的是一种享受.这么好的光阴怎么浪费,睡觉.吃饭.打豆豆这怎么可能(耍多了也烦),完全不符合我们程序员的作风,赶紧起来把文章写完. ...

  8. 两台电脑用蓝牙传文件出现“系统资源不足,电脑之间互相传递单个大文件,例如单个文件50g,100g

    两台电脑用蓝牙传文件出现"系统资源不足,电脑之间互相传递单个大文件,例如单个文件50g,100g 1.我的使用场景是这样的,有一个50g的文件要从一台电脑传输到另一台电脑上,想起了无线传输 ...

  9. linux查看文件的方法,查看linux文件的方法

    查看linux文件的方法 发布时间:2020-05-06 10:54:14 来源:亿速云 阅读:171 作者:小新 今天小编给大家分享的是查看linux文件的方法,相信很多人都不太了解,为了让大家更加 ...

最新文章

  1. 瞄准自然语言处理,百度与鹏城实验室共建实验室
  2. 【Groovy】Groovy 方法调用 ( 使用闭包创建接口对象 | 接口中有一个函数 | 接口中有多个函数 )
  3. 276. Paint Fence
  4. c++-内存管理-array allocator
  5. 被 Kafka 虐的日子,太惨了……
  6. 数据结构实验之二叉树的建立与遍历
  7. IDC服务器共享带宽和独享带宽的区别
  8. android关于截屏,关于android截屏知识的学习
  9. 【POJ2676】Sudoku(优化搜索顺序)
  10. 25muduo_net库源码分析(一)
  11. [Unity菜鸟] Character控制移动
  12. 为什么手工drop_caches之后cache值并未减少?
  13. donet学习笔记4(validate)
  14. boost电路公式详解
  15. 使用formData对象提交表单并上传图片
  16. 推荐一个Windows工具箱-云图工具箱
  17. Linux下更改服务器名称
  18. 狠!删库跑路!一行代码蒸发10亿人民币!
  19. zabbix监控-企业微信webhook告警并使用markdown格式
  20. 深度学习在静息态功能磁共振成像中的应用

热门文章

  1. R语言编写自定义描述统计计算函数、使用doBy包的summaryBy函数计算不同分组(group)的描述性统计值(Descriptive statistics by group、样本个数、均值、标准)
  2. R语言使用ggpubr包的ggarrange函数组合多张结论图:使用ggpubr包将表格嵌套在可视化图像中
  3. R语言单因素重复测量方差分析(one-way repeated measures ANOVA)实战
  4. Python可视化matplotlib自定义:运行时参数修改、自定义样式、默认样式+plt.style.use()
  5. 实验三:XML模型(二)
  6. wince5使用access数据库_关于wince系统支持什么数据库的阿里云论坛用户知识和技术交流...
  7. 信息熵与自然语言处理
  8. docker 查看容器磁盘大小_软件安全 : Docker逃逸详解
  9. threadlocal存连接对象的目的_面试官:知道ThreadLocal嘛?谈谈你对它的理解?
  10. html 移动端(手机)调试 vconsole