先確認你的記憶體是夠大的,之後再來調整細項
記憶體微調參數,所有參數都位於 proc 檔案系統中的 /proc/sys/vm/ 裡。
 
overcommit_memory
定義接受或拒絕大型記憶體需求的狀況。此參數有三種可用值:
 
0 — 預設設定。kernel 會進行探索式的記憶體過度寫入處理,方法是預測記憶體的可用量、並讓公然違規的需求失敗。不幸的是,因為記憶體是以探索式、而非精準的演算法則來分配,因此這設定有時會過度使用系統上的可用記憶體。
1 — kernel 不進行記憶體過度寫入處理。在此設定下,過度使用記憶體的機會會增加,但對於頻繁存取記憶體的任務來說,效能也會增加。
2 — kernel 拒絕相等或大於總可用置換空間與實體記憶體比例(於 overcommit_ratio 指定)的記憶體需求。如果您想要降低記憶體過度寫入的風險,這是最佳設定。
注意:這設定建議用於置換空間大於實體記憶體的系統上。
echo 1 > /proc/sys/vm/overcommit_memory
請注意,proc 檔案系統中用來設定參數的路徑,會因為系統而有所不同。要永久設定這些值,請使用 sysctl 指令
 
overcommit_ratio
指定 overcommit_memory 設為 2 的時候,實體記憶體的比例。預設值為 50。
 
max_map_count
定義一組程序可使用的記憶體對應區域之最大值。在大部分情況下,預設值 65530 就很適合。如果應用程式需要對應多於此數目的檔案,請增加這個值。
 
nr_hugepages
定義 kernel 中配置的巨型分頁數。預設值為 0。只有在系統上擁有連續且足夠的實體記憶體時,才可以分配(或取消分配)巨型分頁。以此參數保留的分頁不能用做其它用途。
echo 1 > /proc/sys/vm/nr_hugepages
請注意,proc 檔案系統中用來設定參數的路徑,會因為系統而有所不同。要永久設定這些值,請使用 sysctl 指令
 


 
 
 
 
微調虛擬記憶體
通常使用虛擬記憶體的是程序、檔案系統快取、以及 kernel。要妥善使用虛擬記憶體,得依賴多種因素,而這些因素可以由以下參數調整:
 
swappiness
其值為 0 到 100,控制系統 swap(記憶體置換)的程度。值愈高表示效能優先,系統會積極地將非作用中的程序移出實體記憶體。值愈低則儘可能避免 swap,降低回應的延遲時間。預設值為60。
 
min_free_kbytes
系統上保留的最低 swap 空間,單位為 KB。用來計算每個低記憶體區域的浮水印值,然後依照大小比例,指定保留記憶體分頁的值。設定此參數時請小心,過高或過低的值都會造成傷害。
將 min_free_kbytes 設定得太低,會讓系統無法取回記憶體。這會導致系統無法回應,並透過 OOM-killing 機制,終結多個程序。
然而,將這個值設得太高(系統總記憶體的 5-10%)會馬上導致系統記憶體不足。Linux 的設計,是使用所有可用記憶體來快取檔案系統的資料。將 min_free_kbytes 值設定得太高,會讓系統花去太多時間取回記憶體。
 
dirty_ratio
百分比數值。當需要變更的資料累積到系統總記憶體的此百分比時,就開始將需要變更資料寫出(透過 pdflush)。預設值為 20。
 
dirty_background_ratio
百分比數值。當需要變更的資料累積到系統總記憶體的此百分比時,就開始在背景將需要變更資料寫出(透過 pdflush)。預設值為 10。
 
drop_caches
將這個值設定為 1、2、或 3 會讓 kernel 放棄多種分頁快取與 slab 快取的組合。
1 系統會無效判定,並釋放所有分頁快取記憶體。
2 系統會釋放所有沒用到的 slab 快取記憶體。
3 系統會釋放所有分頁快取與 slab 快取記憶體。
這是非破壞性的操作。因為需要變更的物件不能被釋放,因此建議您在設定此參數之前,先執行sync。
 
不建議在正式投產的環境中,使用 drop_caches 來釋放記憶體。
 
要在微調時暫時設定這些值,請透過 echo 指令將想用的值傳至 proc 檔案系統中。例如要暫時設定
swappiness 為 50,請執行:
echo 50 > /proc/sys/vm/swappiness
要永久設定這個值,請使用 sysctl 指令。

 
 
 
 
Linux 釋放記憶體 cache
Linux cache有dentry, buffer cache, page cache
Dentry用來加速文件路徑名到inode的轉換
buffer cache加速磁盤塊的讀寫
page cache加速inode的讀寫,縮短IO調用時間。
 
釋放記憶體方法:
1.釋放page cahce
echo 1 > /proc/sys/vm/drop_cache
 
2.釋放dentry和inode
echo 2 > /proc/sys/vm/drop_cache
 
3.釋放page cache,dentry,inode
echo 3 > /proc/sys/vm/drop_cache
 
在釋放記憶體前,最好先允許sync,強制將系統正在處理的page cahce,dentry,inode寫入硬碟。
ERIC0182

Tags: , , , , , ,