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