系統技術非業餘研究 » Linux下誰在消耗我們的cache
阿新 • • 發佈:2018-12-31
Linux下對檔案的訪問和裝置的訪問通常會被cache起來加快訪問速度,這個是系統的預設行為。 而cache需要耗費我們的記憶體,雖然這個記憶體最後可以通過echo 3>/proc/sys/vm/drop_caches這樣的命令來主動釋放。但是有時候我們還是需要理解誰消耗了我們的記憶體。
我們來先了解下記憶體的使用情況:
[[email protected] ~]# free total used free shared buffers cached Mem: 24676836 626568 24050268 0 30884 508312 -/+ buffers/cache: 87372 24589464 Swap: 8385760
有了偉大的systemtap, 我們可以用stap指令碼來了解誰在消耗我們的cache了:
#這個命令列用來調查誰在加資料入page_cache [[email protected] ~]# stap -e 'probe vfs.add_to_page_cache {printf("dev=%d, devname=%s, ino=%d, index=%d, nrpages=%d\n", dev, devname, ino, index, nrpages )}' ... dev=2, devname=N/A, ino=0, index=2975, nrpages=1777 dev=2, devname=N/A, ino=0, index=3399, nrpages=2594 dev=2, devname=N/A, ino=0, index=3034, nrpages=1778 dev=2, devname=N/A, ino=0, index=3618, nrpages=2595 dev=2, devname=N/A, ino=0, index=1694, nrpages=106 dev=2, devname=N/A, ino=0, index=1703, nrpages=107 dev=2, devname=N/A, ino=0, index=1810, nrpages=210 dev=2, devname=N/A, ino=0, index=1812, nrpages=211 ...
這時候我們拷貝個大檔案:
[[email protected] ~]$ cp huge_foo.file bar #這時候我們可以看到檔案的內容被猛的新增到cache去: ... dev=8388614, devname=sda6, ino=2399271, index=39393, nrpages=39393 dev=8388614, devname=sda6, ino=2399271, index=39394, nrpages=39394 dev=8388614, devname=sda6, ino=2399271, index=39395, nrpages=39395 dev=8388614, devname=sda6, ino=2399271, index=39396, nrpages=39396 dev=8388614, devname=sda6, ino=2399271, index=39397, nrpages=39397 dev=8388614, devname=sda6, ino=2399271, index=39398, nrpages=39398 dev=8388614, devname=sda6, ino=2399271, index=39399, nrpages=39399 dev=8388614, devname=sda6, ino=2399271, index=39400, nrpages=39400 dev=8388614, devname=sda6, ino=2399271, index=39401, nrpages=39401 dev=8388614, devname=sda6, ino=2399271, index=39402, nrpages=39402 dev=8388614, devname=sda6, ino=2399271, index=39403, nrpages=39403 dev=8388614, devname=sda6, ino=2399271, index=39404, nrpages=39404 dev=8388614, devname=sda6, ino=2399271, index=39405, nrpages=39405 dev=8388614, devname=sda6, ino=2399271, index=39406, nrpages=39406 dev=8388614, devname=sda6, ino=2399271, index=39407, nrpages=39407 dev=8388614, devname=sda6, ino=2399271, index=39408, nrpages=39408 dev=8388614, devname=sda6, ino=2399271, index=39409, nrpages=39409 dev=8388614, devname=sda6, ino=2399271, index=39410, nrpages=39410 dev=8388614, devname=sda6, ino=2399271, index=39411, nrpages=39411 ...
此外加入我們想了解下系統的cache都誰在用呢, 那個檔案用到多少頁了呢?
我們有個指令碼可以做到,這裡非常謝謝 子團 讓我使用他的程式碼。
[[email protected] ~]# stap -g viewcache.stp 在另外的shell裡面 [[email protected] ~]# dmesg ... inode: 116397109, num: 5 inode: 116397111, num: 2 inode: 116397112, num: 1 inode: 116397149, num: 2 inode: 116397152, num: 1 inode: 116397336, num: 2 inode: 116397343, num: 1 inode: 116397371, num: 4 inode: 116397372, num: 2 ...
非常清楚的看出來每個inode佔用了多少頁,用工具轉換下就知道哪個檔案耗費了多少記憶體。
另外小TIPS:
從inode到檔名的轉換
find / -inum your_inode
從檔名到inode的轉換
stat -c “%i” your_filename
或者 ls -i your_filename
我們套用了下就馬上知道那個檔案佔用的cache很多。
[[email protected] ~]$ sudo find / -inum 2399248 /home/chuba/kernel-debuginfo-2.6.18-164.el5.x86_64.rpm
玩的開心。
後記:
linux下有個這樣的系統呼叫可以知道頁面的狀態:mincore – determine whether pages are resident in memory
同時有人作個指令碼fincore更方便大家的使用, 點選下載fincore
Post Footer automatically generated by wp-posturl plugin for wordpress.
No related posts.