在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 ...