一个可以查看Linux当前缓存了哪些大文件的小工具

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


  1. $ free -h 
  2.               total        used        free      shared  buff/cache   available 
  3. Mem:            15G        6.4G        2.3G        1.1G        6.9G        7.7G 
  4. Swap:          975M        268K        975M 

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

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

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

使用方法比较简单:


  1. $ sudo hcache --top 10 
  2. [sudo] password for silenceshell: 
  3. +----------------------------------------------------------------------------------+----------------+------------+-----------+---------+ 
  4. | Name                                                                             | Size (bytes)   | Pages      | Cached    | Percent | 
  5. |----------------------------------------------------------------------------------+----------------+------------+-----------+---------| 
  6. | /opt/google/chrome/chrome                                                        | 114911208      | 28055      | 25457     | 090.740 | 
  7. | /usr/share/code/code                                                             | 67688720       | 16526      | 12274     | 074.271 | 
  8. | /home/silenceshell/Software/pycharm-community-2016.2/lib/pycharm.jar                   | 95177431       | 23237      | 11325     | 048.737 | 
  9. | /opt/atom/atom                                                                   | 62641344       | 15294      | 10578     | 069.164 | 
  10. | /usr/bin/dockerd                                                                 | 39121168       | 9552       | 7103      | 074.361 | 
  11. | /home/silenceshell/Software/pycharm-community-2016.2/jre/jre/lib/amd64/libjfxwebkit.so | 57455824       | 14028      | 6625      | 047.227 | 
  12. | /usr/lib/x86_64-linux-gnu/libQtWebKit.so.4.10.2                                  | 36462184       | 8902       | 6316      | 070.950 | 
  13. | /usr/lib/beyondcompare/BCompare                                                  | 30640160       | 7481       | 5505      | 073.586 | 
  14. | /usr/bin/SecureCRT                                                               | 29524560       | 7209       | 4806      | 066.667 | 
  15. | /usr/share/code/libnode.so                                                       | 21135976       | 5161       | 4588      | 088.898 | 
  16. +--------------------------------------------------------------------- 

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


  1. $ lsof /usr/lib/x86_64-linux-gnu/libQtWebKit.so.4.10.2 
  2. COMMAND    PID   USER  FD   TYPE DEVICE SIZE/OFF    NODE NAME 
  3. quiterss 20630 silenceshell mem    REG    8,5 36462184 3936610 /usr/lib/x86_64-linux-gnu/libQtWebKit.so.4.10.2 

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


  1. -------------+----------------+------------+-----------+---------+ 
  2. $ sudo ./hcache --top 3  --bname   
  3. +-------------+----------------+------------+-----------+---------+ 
  4. | Name        | Size (bytes)   | Pages      | Cached    | Percent | 
  5. |-------------+----------------+------------+-----------+---------| 
  6. | chrome      | 114911208      | 28055      | 25476     | 090.807 | 
  7. | pycharm.jar | 95177431       | 23237      | 11479     | 049.400 | 
  8. | atom        | 62641344       | 15294      | 10578     | 069.164 | 
  9. +-------------+----------------+------------+-----------+---------+ 

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

作者:伊布

来源:51CTO

时间: 2024-10-26 21:50:42

一个可以查看Linux当前缓存了哪些大文件的小工具的相关文章

UCloner 是一个针对 Ubuntu Linux 编写的系统备份、恢复、克隆工具

http://code.google.com/p/ucloner/Introduction¶  UCloner is a backup/restore/clone tool designed for Ubuntu Linux. In some way it's just like Norton Ghost for Windows.  With UCloner you can backup your Ubuntu system to a squashfs image file. Directly

Linux 中清空或删除大文件内容的五种方法_Linux

在 Linux 终端下处理文件时,有时我们想直接清空文件的内容但又不必使用任何Linux命令行编辑器 去打开这些文件.那怎样才能达到这个目的呢?在这篇文章中,我们将介绍几种借助一些实用的命令来清空文件内容的方法. 注意: 由于再Linux中一切皆文件,你需要时刻注意,确保你将要清空的文件不是重要的用户文件或者系统文件.清空重要的系统文件或者配置文件可能会引发严重的应用失败或者系统错误. 提示:在下面的示例中,我们将使用名为 access.log 的文件来作为示例样本. 1. 通过重定向到 Nul

Linux下清空或删除大文件内容的5种方法

在 Linux 终端下处理文件时,有时我们想直接清空文件的内容但又不必使用任何 Linux 命令行编辑器 去打开这些文件.那怎样才能达到这个目的呢?在这篇文章中,我们将介绍几种借助一些实用的命令来清空文件内容的方法. 注意:在我们进一步深入了解这些方法之前,请记住: 由于在 Linux 中一切皆文件,你需要时刻注意,确保你将要清空的文件不是重要的用户文件或者系统文件.清空重要的系统文件或者配置文件可能会引发严重的应用失败或者系统错误. 前面已经说道,下面的这些方法都是从命令行中达到清空文件的目的

Linux 下清空或删除大文件内容的 5 种方法

在 Linux 终端下处理文件时,有时我们想直接清空文件的内容但又不必使用任何 Linux 命令行编辑器 去打开这些文件.那怎样才能达到这个目的呢?在这篇文章中,我们将介绍几种借助一些实用的命令来清空文件内容的方法. 注意:在我们进一步深入了解这些方法之前,请记住: 由于在 Linux 中一切皆文件,你需要时刻注意,确保你将要清空的文件不是重要的用户文件或者系统文件.清空重要的系统文件或者配置文件可能会引发严重的应用失败或者系统错误. 前面已经说道,下面的这些方法都是从命令行中达到清空文件的目的

linux下fallocate快速创建大文件

以前创建文件我一般用dd来创建,例如创建一个512M的文件: dd命令可以轻易实现创建指定大小的文件,如 dd if=/dev/zero of=test bs=1M count=1000 会生成一个1000M的test文件,文件内容为全0(因从/dev/zero中读取,/dev/zero为0源) 但是这样为实际写入硬盘,文件产生速度取决于硬盘读写速度,如果欲产生超大文件,速度很慢 在某种场景下,我们只想让文件系统认为存在一个超大文件在此,但是并不实际写入硬盘 则可以 dd if=/dev/zer

linux下shell脚本切割大文件为多个小txt文件

解决方法: 1. 先使用split命令切割大文件,每个小文件保存100万行 split 参数: -b  :后面可接欲分割成的档案大小,可加单位,例如 b, k, m 等: -l  :以行数来进行分割: #按每个文件1000行来分割除 split -l 1000 httperr8007.log httperr   httpaa,httpab,httpac ........   #按照每个文件100K来分割 split -b 100k httperr8007.log http   httpaa,ht

Linux如何查找大文件或目录总结及在全部目录中查找

 在Windows系统中我们可以使用TreeSize工具查找一些大文件或文件夹非常的方便高效在Linux系统中如何去搜索一些比较大的文件呢下面我整理了一下在Linux系统中如何查找大文件或文件夹的方法.   1 如何查找大文件 其实很多时候你需要了解当前系统下有哪些大文件比如文件大小超过100M或1G阀值视具体情况而定.那么如何把这些大文件搜索出来呢例如我要搜索当前目录下超过800M大小的文件 [root@getlnx01 u03]# pwd /u03 [root@getlnx01 u03]#

Linux如何查找大文件或目录总结

    在Windows系统中,我们可以使用TreeSize工具查找一些大文件或文件夹,非常的方便高效,在Linux系统中,如何去搜索一些比较大的文件呢?下面我整理了一下在Linux系统中如何查找大文件或文件夹的方法.   1: 如何查找大文件? 其实很多时候,你需要了解当前系统下有哪些大文件,比如文件大小超过100M或1G(阀值视具体情况而定).那么如何把这些大文件搜索出来呢?例如我要搜索当前目录下,超过800M大小的文件 [root@getlnx01 u03]# pwd /u03 [root

查看Linux服务器下的内存使用情况

查看Linux服务器下的内存使用情况 ,可以使用命令free -m.注意此命令只在Linux下有效,在FreeBSD中没有此命令.命令如下所示: used:已经使用的内存数 free:空闲的内存数 shared:多个进程共享的内存总额 -buffers/cache:(已用)的内存数,即used-buffers-cached +buffers/cache:(可用)的内存数,即free+buffers+cached 得出结论: 可用内存的计算公式为: 可用内存=free+buffers+cached