Linux之 手動釋放記憶體

張衝andy發表於2017-09-07

我們在程式中要怎樣去描述一個檔案呢?我們用目錄項(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/,如需轉載,請註明出處,否則將追究法律責任。

相關文章