1. 程式人生 > 其它 >Linux效能優化-記憶體是怎麼工作的

Linux效能優化-記憶體是怎麼工作的

一、記憶體工作原理:
1.linux核心給每個程序提供了一個獨立的虛擬地址空間,並且這個空間是連續的。
2.虛擬地址空間分為核心空間和使用者空間。程序在使用者態時只能訪問使用者空間記憶體,只有進入核心態後才能訪問核心空間記憶體;雖然每個程序都有核心空間,但這些核心空間關聯的是相同的實體記憶體。
3.並不是所有的虛擬記憶體都會分配實體記憶體,只有實際使用的虛擬記憶體才分配實體記憶體;
二、記憶體回收的三種方式:
1.回收快取,比如通過LRU演算法回收最近很少使用的記憶體頁面;
2.回收不常訪問的記憶體,把不常用的記憶體通過交換分割槽直接寫到磁碟中;
注意:此方法會用到swap分割槽。把程序暫時不用的資料放到磁碟(swap)上,不過會嚴重影響效能;
3.通過oom殺死程序;
1.一個程序消耗的記憶體越大,oom_score越大;
2.一個程序執行佔用的cpu越多,oom_score越小;
3.oom_score越大的程序,越容易被OOM殺死;
4.可以通過調整/proc/${pidof sshd)/oom_adj來調整oom_score,值範圍是[-17,15],-17表示禁止被OOM;
三、記憶體檢視方式:
1. free
2. top
1. VIRT是程序申請的虛擬記憶體,比實際佔用記憶體要大得多;
2. RES是常駐記憶體,是程序實際佔用記憶體;
3. SHR是共享記憶體,比如與其他程序共同使用的共享記憶體、載入的動態連結庫以及程式的程式碼段等。不過SHR也會有程式程式碼段,非共享動態連結庫等,所以不能把多個程序的SHR相加得結果;
注意:
1. 虛擬記憶體通常不會全部分配到實體記憶體;