Linux下清空系統cache快取

2021-06-03 01:14:23 字數 1653 閱讀 4086

在linux系統下,通過命令可以檢視記憶體狀態,比如

# more /proc/meminfo 

memtotal:     16423848 kb

memfree:       3008348 kb

buffers:        272916 kb

cached:       12539184 kb

#sync

#echo 3 > /proc/sys/vm/drop_caches

執行完後,再檢視記憶體狀態,如下:

# more /proc/meminfo 

memtotal:     16423848 kb

memfree:      16099556 kb

buffers:           360 kb

cached:          52720 kb

...除了這個方法之外,還在網上找到這麼一段程式,據說可以清空某個指定檔案的快取,不過發現對於nfs不起作用,放在這裡朋友一塊交流交流。

#include

#include

#include

#include

#include

main(int argc,char **argv)

printf("opening: %s\n",argv[1]);

fd = open(argv[1], o_rdwr);

//printf("fd: %d\n",fd);

if (fd < 0)

//result = posix_fadvise(fd, 0, 0, posix_fadv_dontneed);

result = posix_fadvise(fd, 0, 0, 4);

printf("result: %d\n",result);

close(fd);

_exit(0);

}linux下讀寫檔案時,os會為檔案建立快取,用以提高速度。這部分用於快取的記憶體,在檔案關閉後,仍然不會被釋放(什麼時候會被釋放不得而知)。

但是在記憶體使用有限度或者檔案很大的情況下,有時需要馬上釋放快取或者禁止使用快取。

有以下兩種方法。

1,posix_fadvise函式

int posix_fadvise(int 

fd, off_t 

offset

, off_t 

len, int 

advice

);posix_fadvise(

fd, 0, 0, posix_fadv_dontneed);

len=0表示檔案全部

posix_fadv_dontneed表示告訴os,這個檔案在最近一段時間內不會被使用

試驗了一下,發現檔案開啟後讀寫前使用這個函式沒有用處

檔案讀寫之後關閉之前使用有用 2,

/proc/sys/vm/drop_caches    linux 2.6.16 以後有效

釋放pagecache echo 1 > /proc/sys/vm/drop_caches

釋放dentry、inode    echo 2 > /proc/sys/vm/drop_caches

釋放pagecache dentry、inode  echo 3 > /proc/sys/vm/drop_caches

這個方法沒有試驗過

linux下釋放cache記憶體

細心的朋友會注意到,當你在linux下頻繁訪問檔案後,物理記憶體會很快被用光,當程式結束後,記憶體不會被正常釋放,而是一直作為caching.這個問題,貌似有不少人在問,不過都沒有看到有什麼很好解決的辦法.那麼我來談談這個問題.先來說說free命令 root server free m total ...

linux下釋放cache記憶體

細心的朋友會注意到,當你在linux下頻繁訪問檔案後,物理記憶體會很快被用光,當程式結束後,記憶體不會被正常釋放,而是一直作為caching.這個問題,貌似有不少人在問,不過都沒有看到有什麼很好解決的辦法.那麼我來談談這個問題.先來說說free命令 root server free m total ...

linux下釋放cache記憶體

細心的朋友會注意到,當你在linux下頻繁訪問檔案後,物理記憶體會很快被用光,當程式結束後,記憶體不會被正常釋放,而是一直作為caching.這個問題,貌似有不少人在問,不過都沒有看到有什麼很好解決的辦法.那麼我來談談這個問題.先來說說free命令 root server free m total ...