Linux之 手動釋放記憶體
我們在程式中要怎樣去描述一個檔案呢?我們用目錄項(dentry)和索引節點(inode)。它們的定義如下:
所謂"檔案", 就是按一定的形式儲存在介質上的資訊,所以一個檔案其實包含了兩方面的資訊,一是儲存的資料本身,二是有關該檔案的組織和管理的資訊。在記憶體中, 每個檔案都有一個dentry(目錄項)和inode(索引節點)結構。
dentry記錄著檔名,上級目錄等資訊,正是它形成了我們所看到的樹狀結構;而有關該檔案的組織和管理的資訊主要存放inode裡面,它記錄著檔案在儲存介質上的位置與分佈。同時dentry->d_inode指向相應的inode結構。dentry與inode是多對一的關係,因為有可能一個檔案有好幾個檔名(硬連結, hard link)
inode代表的是物理意義上的檔案,透過inode可以得到一個陣列,這個陣列記錄了檔案內容的位置,如該檔案位於硬碟的第3,8,10塊,那麼這個陣列的內容就是3,8,10。其索引節點號inode->i_ino,在同一個檔案系統中是唯一的,核心只要根據i_ino,就可以計算出它對應的inode在介質上的位置。就硬碟來說,根據i_ino就可以計算出它對應的inode屬於哪個塊(block),從而找到相應的inode結構。但僅僅用inode還是無法描述出所有的檔案系統,對於某一種特定的檔案系統而言,比如ext3,在記憶體中用ext3_inode_info描述。他是一個包含inode的"容器"。
幾種drop_caches的模式:
To free pagecache:
* echo 1 > /proc/sys/vm/drop_caches
To free dentries and inodes:
* echo 2 > /proc/sys/vm/drop_caches
To free pagecache, dentries and inodes:
* echo 3 > /proc/sys/vm/drop_caches
As this is a non-destructive operation, and dirty objects are notfreeable, the user should run "sync" first in order to make sure allcached objects are freed.
This tunable was added in 2.6.16.
注意:禁止生產上使用 2 、3 模式
手動清理cache(防止使用swap):
[root@testserver ~]# free -m
[root@testserver ~]# sync #強制將改變的內容立刻寫入磁碟,更新超塊資訊
[root@testserver ~]# cat /proc/sys/vm/drop_caches
0
[root@testserver ~]# echo 1 > /proc/sys/vm/drop_caches
[root@testserver ~]# free -m
補充:大頁記憶體可以避免使用swap
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31383567/viewspace-2144639/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Linux釋放記憶體及手動釋放Oracle共享記憶體段Linux記憶體Oracle
- Linux手動釋放快取記憶體Linux快取記憶體
- Linux系統手動釋放記憶體快取Linux記憶體快取
- vector 避免記憶體頻繁分配釋放與手動釋放vector記憶體記憶體
- linux釋放記憶體Linux記憶體
- 手動釋放linux下cache所佔用的實體記憶體Linux記憶體
- 轉 linux 記憶體釋放Linux記憶體
- Linux釋放cache記憶體Linux記憶體
- linux 記憶體釋放命令Linux記憶體
- 怎麼手動在rstudio中釋放記憶體?記憶體
- FireFox記憶體自動釋放Firefox記憶體
- Linux下如何釋放cache記憶體Linux記憶體
- Linux系統釋放cache記憶體Linux記憶體
- vector 的記憶體釋放記憶體
- XCode釋放記憶體XCode記憶體
- 如何主動釋放 HeapIdle 的記憶體API記憶體
- 如何釋放linux cache佔用的記憶體Linux記憶體
- 記憶體的分配與釋放,記憶體洩漏記憶體
- Linux手動釋放CacheLinux
- 記錄一下,linux釋放記憶體的方法Linux記憶體
- C# 垃圾回收釋放記憶體C#記憶體
- 正確釋放Vector的記憶體記憶體
- win10如何設定自動釋放記憶體_win10怎麼設定自動清理系統垃圾釋放記憶體Win10記憶體
- 手工釋放linux記憶體——/proc/sys/vm/drop_cacheLinux記憶體
- 記憶體動態分配與釋放,malloc和new區別記憶體
- golang 釋放記憶體機制的探索Golang記憶體
- vector clear() 方法 記憶體釋放問題記憶體
- C/C++記憶體分配以及釋放C++記憶體
- mongodb釋放記憶體-切換日誌MongoDB記憶體
- 二維陣列的動態記憶體分配和釋放 (轉)陣列記憶體
- golang手動管理記憶體Golang記憶體
- 手工釋放linux記憶體——/proc/sys/vm/drop_caches(轉載)Linux記憶體
- .Net記憶體管理釋放的兩種方式記憶體
- C++ - 二級指標動態記憶體申請與釋放C++指標記憶體
- 共享記憶體段未釋放導致資料庫記憶體被耗盡記憶體資料庫
- Linux如何手動釋放Swap、Buffer和CacheLinux
- Vector() 記憶體釋放 不得不說的故事記憶體
- C++ vector 釋放記憶體的兩種方法C++記憶體