一個可以查看Linux當(dāng)前緩存了哪些大文件的小工具
Linux 用戶可能經(jīng)常遇到的一個問題是,機(jī)器有 16GB 內(nèi)存之多,運(yùn)行的進(jìn)程也不多,但是剩下的 free 內(nèi)存并不多,大部分都被 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 的內(nèi)存分配機(jī)制來說,這種被 buff 和 cache 占用的內(nèi)存在系統(tǒng)需要時會及時釋放出來,但是有時候我們想知道到底 cache 了些什么卻沒有一個好的辦法。
前幾天看到有個人用 go 寫了個 pcstat,可以查看某個文件是否被緩存(作者的目的是數(shù)據(jù)庫調(diào)優(yōu)),也可以根據(jù)進(jìn)程的 PID 來查看都緩存了哪些文件,不過該工具不能查看整個操作系統(tǒng)都 cache 了哪些文件。
因此,我基于 pcstat 寫了個 hcache,增加了查看當(dāng)前操作系統(tǒng)所 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
默認(rèn)情況下會顯示 cache 的文件的全路徑,會比較長,也可以使用 --bname 選項(xiàng)來僅顯示文件名:
- -------------+----------------+------------+-----------+---------+
- $ 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,歡迎關(guān)注和提交 issue 及 PR。