計(jì)算內(nèi)存vs非計(jì)算內(nèi)存,二者有什么區(qū)別?
通俗的說法:
凡是硬盤上有對(duì)應(yīng)的數(shù)據(jù),占用的內(nèi)存,就是非計(jì)算內(nèi)存,非計(jì)算內(nèi)存需要被別的進(jìn)程用到時(shí),其中的數(shù)據(jù)無需page out,因?yàn)樵俅涡枰x取的時(shí)候從硬盤文件中拿出來即可。
凡是硬盤上沒有數(shù)據(jù)對(duì)應(yīng)的內(nèi)存占用叫做計(jì)算內(nèi)存,例如用C寫個(gè)程序,分配一塊1MB的內(nèi)存,這部分內(nèi)存不管其中數(shù)據(jù)是否有意義,硬盤上沒有文件對(duì)應(yīng),叫做計(jì)算內(nèi)存。
以上所謂“硬盤上有無對(duì)應(yīng)數(shù)據(jù)”的前提是:計(jì)算內(nèi)存、非計(jì)算內(nèi)存是操作系統(tǒng)的分類,所以操作系統(tǒng)知道硬盤上有對(duì)應(yīng),才叫非計(jì)算內(nèi)存。雖然任何數(shù)據(jù)庫的內(nèi)存占用絕大部分是磁盤緩沖,按理說其中的數(shù)據(jù)硬盤上有對(duì)應(yīng),但是,這些內(nèi)存是數(shù)據(jù)庫管理的,操作系統(tǒng)只知道這些內(nèi)存是DBMS主動(dòng)向操作系統(tǒng)申請(qǐng)的,其中放的什么,操作系統(tǒng)并不知道,所以是計(jì)算內(nèi)存。
breakdown:?計(jì)算內(nèi)存、非計(jì)算內(nèi)存都是指物理內(nèi)存占用,而物理內(nèi)存的情況,由于VMM機(jī)制,是時(shí)刻在變化的,所以只能說某一瞬間,計(jì)算內(nèi)存、非計(jì)算內(nèi)存各占用多少。
● 計(jì)算內(nèi)存:
凡是進(jìn)程/程序運(yùn)行中用程序代碼向操作系統(tǒng)申請(qǐng)的內(nèi)存,全部是計(jì)算內(nèi)存,也就是說除非這個(gè)程序運(yùn)行起來,除了自身代碼占用的內(nèi)存,一點(diǎn)額外的內(nèi)存也不用,否則它幾乎必然會(huì)造成計(jì)算內(nèi)存占用的。說“幾乎”,是因?yàn)橛?jì)算內(nèi)存、非計(jì)算內(nèi)存都是指物理內(nèi)存,如果一個(gè)程序申請(qǐng)了1MB內(nèi)存,但一段時(shí)間沒有用這部分內(nèi)存,很可能在其他進(jìn)程需要內(nèi)存,且物理內(nèi)存比較緊張時(shí),按照LRU算法(Latest Recently Unused,最近最少使用),被操作系統(tǒng)部分或全部page out到paging space中,如果全部被page out了,可以說這個(gè)時(shí)刻,此進(jìn)程沒有使用計(jì)算內(nèi)存。換句話說,就是程序申請(qǐng)了1MB內(nèi)存,那么它在某一時(shí)刻占用的計(jì)算內(nèi)存從0字節(jié)~1MB都有可能。
進(jìn)程主動(dòng)向操作系統(tǒng)申請(qǐng)分配的內(nèi)存,從程序編碼上來看,以C為例,典型的就是malloc,當(dāng)然,還有程序語言中的隱式分配,反正對(duì)于操作系統(tǒng)來說都一樣,例如char *string1="ABCDEFG"; int number=22222; 前者會(huì)導(dǎo)致自動(dòng)向操作系統(tǒng)申請(qǐng)8個(gè)字節(jié),后一個(gè)會(huì)申請(qǐng)一個(gè)字(兩個(gè)字節(jié))
當(dāng)進(jìn)程退出,或者意外崩潰,對(duì)于操作系統(tǒng)來說,它知道進(jìn)程不在了,而進(jìn)程申請(qǐng)的內(nèi)存,操作系統(tǒng)明確知道是哪些的,在資源回收的過程中,會(huì)自動(dòng)把這個(gè)進(jìn)程申請(qǐng)的內(nèi)存釋放掉,這個(gè)過程是很快的。所以我們可以看到:如果計(jì)算內(nèi)存高企,我們把應(yīng)用一停,也就是把使用計(jì)算內(nèi)存最多的進(jìn)程停止,計(jì)算內(nèi)存占用率立刻就下來了。
● 非計(jì)算內(nèi)存:
操作系統(tǒng)明確知道這部分內(nèi)存的用途是放硬盤對(duì)應(yīng)數(shù)據(jù)的,所以,顯然這部分內(nèi)存不是任何進(jìn)程可以控制,也就是說不可能一個(gè)程序主動(dòng)要求分配多少非計(jì)算內(nèi)存或者釋放多少。這部分完全是操作系統(tǒng)在直接管理:分配、記錄狀態(tài)、使用、釋放,其他進(jìn)程只可能用間接手段影響非計(jì)算內(nèi)存,例如讀寫文件。
非計(jì)算內(nèi)存我們常見的是如下用途:
——程序代碼:當(dāng)運(yùn)行程序時(shí),代碼初始裝入到物理內(nèi)存的什么地方、重定位到什么地方,是操作系統(tǒng)管理的,它會(huì)記住程序代碼放在物理內(nèi)存什么地方,及其對(duì)應(yīng)程序文件的位置。當(dāng)程序代碼占用的page frame需要被其他用途使用時(shí),操作系統(tǒng)直接把這個(gè)page frame轉(zhuǎn)給要使用這部分內(nèi)存的進(jìn)程,并記錄標(biāo)志,下次要是這個(gè)page原來的內(nèi)容需要被引用,從對(duì)應(yīng)程序文件中的對(duì)應(yīng)位置讀取進(jìn)入物理內(nèi)存。有些進(jìn)程的某些計(jì)算內(nèi)存占用是不能被替換的,例如執(zhí)行VMM管理任務(wù)的操作系統(tǒng)核心進(jìn)程,所以這部分會(huì)有操作系統(tǒng)機(jī)制設(shè)置標(biāo)志,這個(gè)就是常說的pin住某些內(nèi)存不準(zhǔn)替換掉。
——磁盤訪問緩沖區(qū):這個(gè)不是常說的緩存區(qū),緩存區(qū)(英文Cache)的目的是用來提高性能,而緩沖區(qū)(英文Buffer),是為了塊設(shè)備訪問特點(diǎn)的要求,比如硬盤塊設(shè)備、邏輯卷塊設(shè)備,必須讀寫的基本單位是一個(gè)塊,一般是512字節(jié),哪怕你只讀寫一個(gè)字節(jié),也必須一次讀進(jìn)512字節(jié),修改特定的那一個(gè)字節(jié),然后再整個(gè)512字節(jié)塊全部寫出到硬盤。這就需要緩沖區(qū)的存在。緩沖區(qū)的總個(gè)數(shù),是不固定的,操作系統(tǒng)可以根據(jù)同時(shí)在訪問的塊的數(shù)量隨時(shí)調(diào)整。
——NFS訪問緩沖區(qū),原理基本同上;
——文件系統(tǒng)緩存:這個(gè)肯定是每一個(gè)字節(jié)都有硬盤文件對(duì)應(yīng)的,顯然是非計(jì)算內(nèi)存。
限制 AIX 的 nocomp (非計(jì)算)內(nèi)存最大值。
把 AIX 的
minperm% = 20
maxclient% = 80
maxperm% = 80
調(diào)整更低。
解決步驟:
查看原來的AIX的 minperm% 、 maxclient% 、 maxperm% 的值。如下:
Root 用戶查看:
>vmo –a
minperm% = 20
maxclient% = 80
maxperm% = 80
把 minperm% 設(shè)置成 10 , maxclient% 設(shè)置成 20 , maxperm% 設(shè)置成 20
用 root 命令行執(zhí)行:
1 、?vmo -p -o minperm%=10
2 、 vmo -p -o maxclient%=20
3 、 vmo -p -o maxperm%=20
備注:
minperm 和 maxperm 參數(shù)的值
操作系統(tǒng)通過把在曾經(jīng)讀寫的內(nèi)存頁留在實(shí)內(nèi)存一滿足不同要求。如果文件頁面在它們的頁幀被重新分配前被請(qǐng)求,那就節(jié)省了輸入輸出操作。該文件頁面可以來自本地的或遠(yuǎn)程的(如 NFS )系統(tǒng)。
頁幀使用的文件相對(duì)用于計(jì)算的(工作或程序文本)段的文件的比例是松散地受控于 minperm 和 maxperm 的值的:
如果 RAM 中文件頁面所占的百分比高于 maxperm ,頁面替換的竊取只用于文件頁。
如果 RAM 中文件頁面所占的百分比低于 minperm ,頁面替換的竊取同時(shí)用于文件頁和計(jì)算頁。
如果 RAM 中文件頁面所占的百分比介于 minperm 和 maxperm 之間,頁面替換只竊取文件頁,除非文件頁的重調(diào)入數(shù)量大于計(jì)算頁數(shù)。
其中 Noncomp 在 20 %- 80 %之間,此時(shí)內(nèi)存頁交換算法通常只交換文件緩存頁,但如果文件緩存頁的交換率大于程序頁時(shí),程序頁也同樣被交換。由于 SGA 屬于 Comp 頁,數(shù)據(jù)文件緩存屬于 Noncomp 頁,而在數(shù)據(jù)大量訪問時(shí),文件緩存頁的交換率大于程序頁( SGA ),因此大量的 SGA 頁面被交換;為避免大量 SGA 頁被交換,需要降低 maxperm% 值到 35 %以下,這樣就只有文件緩存頁面被交換,減少了 SGA 交換的次數(shù)。
來源:twt企業(yè)IT社區(qū)
免責(zé)聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺(tái)僅提供信息存儲(chǔ)服務(wù)。文章僅代表作者個(gè)人觀點(diǎn),不代表本平臺(tái)立場(chǎng),如有問題,請(qǐng)聯(lián)系我們,謝謝!