通俗的說(shuō)法:
凡是硬盤(pán)上有對(duì)應(yīng)的數(shù)據(jù),占用的內(nèi)存,就是非計(jì)算內(nèi)存,非計(jì)算內(nèi)存需要被別的進(jìn)程用到時(shí),其中的數(shù)據(jù)無(wú)需page out,因?yàn)樵俅涡枰x取的時(shí)候從硬盤(pán)文件中拿出來(lái)即可。
凡是硬盤(pán)上沒(méi)有數(shù)據(jù)對(duì)應(yīng)的內(nèi)存占用叫做計(jì)算內(nèi)存,例如用C寫(xiě)個(gè)程序,分配一塊1MB的內(nèi)存,這部分內(nèi)存不管其中數(shù)據(jù)是否有意義,硬盤(pán)上沒(méi)有文件對(duì)應(yīng),叫做計(jì)算內(nèi)存。
以上所謂“硬盤(pán)上有無(wú)對(duì)應(yīng)數(shù)據(jù)”的前提是:計(jì)算內(nèi)存、非計(jì)算內(nèi)存是操作系統(tǒng)的分類(lèi),所以操作系統(tǒng)知道硬盤(pán)上有對(duì)應(yīng),才叫非計(jì)算內(nèi)存。雖然任何數(shù)據(jù)庫(kù)的內(nèi)存占用絕大部分是磁盤(pán)緩沖,按理說(shuō)其中的數(shù)據(jù)硬盤(pán)上有對(duì)應(yīng),但是,這些內(nèi)存是數(shù)據(jù)庫(kù)管理的,操作系統(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í)刻在變化的,所以只能說(shuō)某一瞬間,計(jì)算內(nèi)存、非計(jì)算內(nèi)存各占用多少。
● 計(jì)算內(nèi)存:
凡是進(jìn)程/程序運(yùn)行中用程序代碼向操作系統(tǒng)申請(qǐng)的內(nèi)存,全部是計(jì)算內(nèi)存,也就是說(shuō)除非這個(gè)程序運(yùn)行起來(lái),除了自身代碼占用的內(nèi)存,一點(diǎn)額外的內(nèi)存也不用,否則它幾乎必然會(huì)造成計(jì)算內(nèi)存占用的。說(shuō)“幾乎”,是因?yàn)橛?jì)算內(nèi)存、非計(jì)算內(nèi)存都是指物理內(nèi)存,如果一個(gè)程序申請(qǐng)了1MB內(nèi)存,但一段時(shí)間沒(méi)有用這部分內(nèi)存,很可能在其他進(jìn)程需要內(nèi)存,且物理內(nèi)存比較緊張時(shí),按照LRU算法(Latest Recently Unused,最近最少使用),被操作系統(tǒng)部分或全部page out到paging space中,如果全部被page out了,可以說(shuō)這個(gè)時(shí)刻,此進(jìn)程沒(méi)有使用計(jì)算內(nèi)存。換句話說(shuō),就是程序申請(qǐng)了1MB內(nèi)存,那么它在某一時(shí)刻占用的計(jì)算內(nèi)存從0字節(jié)~1MB都有可能。
進(jìn)程主動(dòng)向操作系統(tǒng)申請(qǐng)分配的內(nèi)存,從程序編碼上來(lái)看,以C為例,典型的就是malloc,當(dāng)然,還有程序語(yǔ)言中的隱式分配,反正對(duì)于操作系統(tǒng)來(lái)說(shuō)都一樣,例如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)來(lái)說(shuō),它知道進(jìn)程不在了,而進(jìn)程申請(qǐng)的內(nèi)存,操作系統(tǒng)明確知道是哪些的,在資源回收的過(guò)程中,會(huì)自動(dòng)把這個(gè)進(jìn)程申請(qǐng)的內(nèi)存釋放掉,這個(gè)過(guò)程是很快的。所以我們可以看到:如果計(jì)算內(nèi)存高企,我們把應(yīng)用一停,也就是把使用計(jì)算內(nèi)存最多的進(jìn)程停止,計(jì)算內(nèi)存占用率立刻就下來(lái)了。
● 非計(jì)算內(nèi)存:
操作系統(tǒng)明確知道這部分內(nèi)存的用途是放硬盤(pán)對(duì)應(yīng)數(shù)據(jù)的,所以,顯然這部分內(nèi)存不是任何進(jìn)程可以控制,也就是說(shuō)不可能一個(gè)程序主動(dòng)要求分配多少非計(jì)算內(nèi)存或者釋放多少。這部分完全是操作系統(tǒng)在直接管理:分配、記錄狀態(tài)、使用、釋放,其他進(jìn)程只可能用間接手段影響非計(jì)算內(nèi)存,例如讀寫(xiě)文件。
非計(jì)算內(nèi)存我們常見(jiàn)的是如下用途:
——程序代碼:當(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原來(lái)的內(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è)就是常說(shuō)的pin住某些內(nèi)存不準(zhǔn)替換掉。
——磁盤(pán)訪問(wèn)緩沖區(qū):這個(gè)不是常說(shuō)的緩存區(qū),緩存區(qū)(英文Cache)的目的是用來(lái)提高性能,而緩沖區(qū)(英文Buffer),是為了塊設(shè)備訪問(wèn)特點(diǎn)的要求,比如硬盤(pán)塊設(shè)備、邏輯卷塊設(shè)備,必須讀寫(xiě)的基本單位是一個(gè)塊,一般是512字節(jié),哪怕你只讀寫(xiě)一個(gè)字節(jié),也必須一次讀進(jìn)512字節(jié),修改特定的那一個(gè)字節(jié),然后再整個(gè)512字節(jié)塊全部寫(xiě)出到硬盤(pán)。這就需要緩沖區(qū)的存在。緩沖區(qū)的總個(gè)數(shù),是不固定的,操作系統(tǒng)可以根據(jù)同時(shí)在訪問(wèn)的塊的數(shù)量隨時(shí)調(diào)整。
——NFS訪問(wèn)緩沖區(qū),原理基本同上;
——文件系統(tǒng)緩存:這個(gè)肯定是每一個(gè)字節(jié)都有硬盤(pán)文件對(duì)應(yīng)的,顯然是非計(jì)算內(nèi)存。
限制 AIX 的 nocomp (非計(jì)算)內(nèi)存最大值。
把 AIX 的
minperm% = 20
maxclient% = 80
maxperm% = 80
調(diào)整更低。
解決步驟:
查看原來(lái)的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)通過(guò)把在曾經(jīng)讀寫(xiě)的內(nèi)存頁(yè)留在實(shí)內(nèi)存一滿足不同要求。如果文件頁(yè)面在它們的頁(yè)幀被重新分配前被請(qǐng)求,那就節(jié)省了輸入輸出操作。該文件頁(yè)面可以來(lái)自本地的或遠(yuǎn)程的(如 NFS )系統(tǒng)。
頁(yè)幀使用的文件相對(duì)用于計(jì)算的(工作或程序文本)段的文件的比例是松散地受控于 minperm 和 maxperm 的值的:
如果 RAM 中文件頁(yè)面所占的百分比高于 maxperm ,頁(yè)面替換的竊取只用于文件頁(yè)。
如果 RAM 中文件頁(yè)面所占的百分比低于 minperm ,頁(yè)面替換的竊取同時(shí)用于文件頁(yè)和計(jì)算頁(yè)。
如果 RAM 中文件頁(yè)面所占的百分比介于 minperm 和 maxperm 之間,頁(yè)面替換只竊取文件頁(yè),除非文件頁(yè)的重調(diào)入數(shù)量大于計(jì)算頁(yè)數(shù)。
其中 Noncomp 在 20 %- 80 %之間,此時(shí)內(nèi)存頁(yè)交換算法通常只交換文件緩存頁(yè),但如果文件緩存頁(yè)的交換率大于程序頁(yè)時(shí),程序頁(yè)也同樣被交換。由于 SGA 屬于 Comp 頁(yè),數(shù)據(jù)文件緩存屬于 Noncomp 頁(yè),而在數(shù)據(jù)大量訪問(wèn)時(shí),文件緩存頁(yè)的交換率大于程序頁(yè)( SGA ),因此大量的 SGA 頁(yè)面被交換;為避免大量 SGA 頁(yè)被交換,需要降低 maxperm% 值到 35 %以下,這樣就只有文件緩存頁(yè)面被交換,減少了 SGA 交換的次數(shù)。
來(lái)源:twt企業(yè)IT社區(qū)
責(zé)任編輯:haq
-
硬盤(pán)
+關(guān)注
關(guān)注
3文章
1339瀏覽量
58463 -
計(jì)算機(jī)
+關(guān)注
關(guān)注
19文章
7663瀏覽量
90820 -
內(nèi)存
+關(guān)注
關(guān)注
8文章
3125瀏覽量
75274
發(fā)布評(píng)論請(qǐng)先 登錄
虛擬內(nèi)存和云計(jì)算的關(guān)系
虛擬內(nèi)存對(duì)計(jì)算機(jī)性能的影響
虛擬內(nèi)存不足如何解決 虛擬內(nèi)存和物理內(nèi)存的區(qū)別
如何選擇DDR內(nèi)存條 DDR3與DDR4內(nèi)存區(qū)別
內(nèi)存模組n/a怎么解決?
邏輯內(nèi)存和物理內(nèi)存的區(qū)別
Cache和內(nèi)存有什么區(qū)別
計(jì)算機(jī)的內(nèi)存容量有什么作用
內(nèi)存緩沖區(qū)和內(nèi)存的關(guān)系
高速緩沖存儲(chǔ)器與內(nèi)存的區(qū)別
內(nèi)存控制器概述和工作原理
內(nèi)存時(shí)鐘是什么意思
內(nèi)存與主板接觸不良,怎么解決
內(nèi)存儲(chǔ)器和外存儲(chǔ)器有什么區(qū)別
buffers內(nèi)存與cached內(nèi)存的區(qū)別

評(píng)論