學(xué)習(xí)啦 > 學(xué)習(xí)電腦 > 操作系統(tǒng) > Linux教程 > 詳解Linux系統(tǒng)內(nèi)存知識(shí)及調(diào)優(yōu)方案

詳解Linux系統(tǒng)內(nèi)存知識(shí)及調(diào)優(yōu)方案

時(shí)間: 若木635 分享

詳解Linux系統(tǒng)內(nèi)存知識(shí)及調(diào)優(yōu)方案

  內(nèi)存是計(jì)算機(jī)中重要的部件之一,它是與CPU進(jìn)行溝通的橋梁。計(jì)算機(jī)中所有程序的運(yùn)行都是在內(nèi)存中進(jìn)行的,因此內(nèi)存的性能對(duì)計(jì)算機(jī)的影響非常大。內(nèi)存作用是用于暫時(shí)存放CPU中的運(yùn)算數(shù)據(jù),以及與硬盤等外部存儲(chǔ)器交換的數(shù)據(jù)。只要計(jì)算機(jī)在運(yùn)行中,CPU就會(huì)把需要運(yùn)算的數(shù)據(jù)調(diào)到內(nèi)存中進(jìn)行運(yùn)算,當(dāng)運(yùn)算完成后CPU再將結(jié)果傳送出來(lái),內(nèi)存的運(yùn)行也決定了計(jì)算機(jī)的穩(wěn)定運(yùn)行。對(duì)于整個(gè)操作系統(tǒng)來(lái)說(shuō),內(nèi)存可能是最麻煩的的設(shè)備。而其性能的好壞直接影響著整個(gè)操作系統(tǒng)。

  我們知道CPU是不能與硬盤打交道的,只有數(shù)據(jù)被載入到內(nèi)存中才可以被CPU調(diào)用。cpu在訪問內(nèi)存的時(shí)候需要先像內(nèi)存監(jiān)控程序請(qǐng)求,由監(jiān)控程序控制和分配內(nèi)存的讀寫請(qǐng)求,這個(gè)監(jiān)控程序叫做MMU(內(nèi)存管理單元)。下面以32位系統(tǒng)來(lái)說(shuō)明內(nèi)存的訪問過(guò)程:

  32位的系統(tǒng)上每一個(gè)進(jìn)程在訪問內(nèi)存的時(shí)候,每一個(gè)進(jìn)程都當(dāng)做自己有4個(gè)G的內(nèi)存空間可用,這叫虛擬內(nèi)存(地址),虛擬內(nèi)存轉(zhuǎn)化成物理內(nèi)存是通過(guò)MMU來(lái)完成的。為了能夠從線性地址轉(zhuǎn)換成物理地址,需要page table(頁(yè)表)的內(nèi)存空間,page table要載入到MMU上。為了完成線性地址到物理地址的映射,如果按照1個(gè)字節(jié)1個(gè)字節(jié)映射的話,需要一張非常大的表,這種轉(zhuǎn)換關(guān)系會(huì)非常的復(fù)雜。因此把內(nèi)存空間又劃分成了另外一種存儲(chǔ)單元格式,通常為4K。在不同的硬件平臺(tái)上,它們的大小一般是不一樣的,像x86 32位的有4k的頁(yè);而64位的有4k頁(yè),2M頁(yè),4M頁(yè),8M頁(yè)等等,默認(rèn)都是4k的。每一個(gè)進(jìn)程一般而言都有自己的頁(yè)路徑和頁(yè)表映射機(jī)制,不管那一個(gè)頁(yè)表都是由內(nèi)核加載的。每一個(gè)進(jìn)程只能看到自己的線性地址空間,想要增加新的內(nèi)存的時(shí)候,只能在自己的線性地址空間中申請(qǐng),并且申請(qǐng)后一定是通過(guò)操作系統(tǒng)的內(nèi)核映射到物理地址空間中去找那么一段空間,并且告訴線性地址空間準(zhǔn)備好了,可以訪問,并且在page table中增加一條映射關(guān)系,于是就可以訪問物理內(nèi)存了,這種叫做內(nèi)存分配。但是新的申請(qǐng)一定是通過(guò)操作的內(nèi)核到物理內(nèi)存中去找那么一段空間,并且告訴線性地址空間好了,可以建設(shè)映射關(guān)系,最終page table建立映射關(guān)系。

  這反映了上述描述過(guò)程的大體情況??梢钥吹矫恳粋€(gè)用戶程序都會(huì)有自己的頁(yè)表,并且映射到對(duì)應(yīng)的主存儲(chǔ)器上去。

  根據(jù)上述文字和圖表的描述可以發(fā)現(xiàn)2個(gè)問題:

  1.每個(gè)進(jìn)程如果需要訪問內(nèi)存的時(shí)候都需要去查找page table的話,勢(shì)必會(huì)造成服務(wù)器的性能底下

  2.如果主存儲(chǔ)器的內(nèi)存滿了以后,應(yīng)用程序還需要調(diào)用內(nèi)存的時(shí)候怎么辦

  對(duì)于第一個(gè)問題,我們就需要借助TLB(Translation Lookaside Buffer)翻譯后備緩沖器。TLB是一個(gè)內(nèi)存管理單元,它可以用于改進(jìn)虛擬地址到物理地址轉(zhuǎn)換速度的緩存。這樣每次在查找page table的時(shí)候就可以先去TLB中查找相應(yīng)的頁(yè)表數(shù)據(jù),如果有就直接返回,沒有再去查找page table,并把查找到的結(jié)果緩存中TLB中。TLB雖然解決了緩存的功能,但是在那么page table中查找映射關(guān)系仍然很慢,所以又有了page table的分級(jí)目錄。page table可以分為1級(jí)目錄,2級(jí)目錄和偏移量

  但是一個(gè)進(jìn)程在運(yùn)行的時(shí)候要頻繁的打開文件,關(guān)閉文件。這就意味著要頻繁的申請(qǐng)內(nèi)存和釋放內(nèi)存。有些能夠在內(nèi)存中緩存數(shù)據(jù)的那些進(jìn)程,他們對(duì)內(nèi)存的分配和回收更多,那么每一次分配都會(huì)在頁(yè)表中建立一個(gè)對(duì)應(yīng)項(xiàng)。所以,就算內(nèi)存的速度很快,大量頻繁的同一時(shí)間分配和釋放內(nèi)存,依然會(huì)降低服務(wù)器的整體性能。當(dāng)然內(nèi)存空間不夠用的時(shí)候,我們稱為oom(out of memory,內(nèi)存耗盡)。當(dāng)內(nèi)存耗盡的時(shí)候,,整個(gè)操作系統(tǒng)掛了。這種情況下我們可以考慮交換分區(qū),交換分區(qū)畢竟是由硬盤虛擬出來(lái)的內(nèi)存,所以其性能與真正的內(nèi)存相比,差了很多,所以要盡力避免使用交換分區(qū)。有物理內(nèi)存空間的時(shí)候盡量保證全部使用物理內(nèi)存。cpu無(wú)論如何是不能給交換內(nèi)存打交道的,它也只能給物理內(nèi)存打交道,能尋址的空間也只能是物理內(nèi)存。所以當(dāng)真正物理內(nèi)存空間不夠用的時(shí)候,會(huì)通過(guò)LRU算法把其中最近最少使用的內(nèi)存放到交換內(nèi)存中去,這樣物理內(nèi)存中的那段空間就可以供新的程序使用了。但是這樣會(huì)引發(fā)另外的一個(gè)問題,即原來(lái)的進(jìn)程通過(guò)page table尋找的時(shí)候,那一段空間的數(shù)據(jù)已經(jīng)不屬于它了。所以此刻cpu發(fā)送通知或者異常告訴這個(gè)程序,這個(gè)地址空間已不屬于它,這個(gè)時(shí)候可能會(huì)出現(xiàn)2種情況:

  1.物理內(nèi)存有可用的空間可用:這個(gè)時(shí)候cpu會(huì)根據(jù)以前的轉(zhuǎn)換策略會(huì)把交換分區(qū)中的那段內(nèi)存重新送到物理內(nèi)存中去,但是轉(zhuǎn)換過(guò)來(lái)的空間地址不一定會(huì)是以前的那一段空間地址,因?yàn)橐郧暗哪且欢慰臻g地址可能已經(jīng)被別人使用了。

  2.物理內(nèi)存沒有可用的空間可用:這個(gè)時(shí)候依然會(huì)使用LRU算發(fā)把當(dāng)前物理地址空間上最近最少使用的空間地址轉(zhuǎn)換到交換內(nèi)存中去,并把當(dāng)前進(jìn)程需要的這斷在交換空間中的內(nèi)存送到物理內(nèi)存空間中去,并且重新建立映射關(guān)系。

  上述通知或者異常出現(xiàn)的情況,通常叫做缺頁(yè)異常。缺頁(yè)異常也分為大異常和小異常兩種。大異常就是訪問的數(shù)據(jù)內(nèi)存中沒有,不的不去硬盤上加載,無(wú)論是從交換內(nèi)存中還是直接從磁盤的某個(gè)文件系統(tǒng)上,反正需要從硬盤上去加載,這種異常加載需要很長(zhǎng)時(shí)間。小異常就是進(jìn)程之間通過(guò)共享內(nèi)存,第二個(gè)進(jìn)程訪問的時(shí)候,查看本地的內(nèi)存映射表沒有,但是其它進(jìn)程已經(jīng)擁有了這個(gè)內(nèi)存頁(yè),所以可以直接映射,這種異常加載需要的時(shí)間一般很短。

  在操作系統(tǒng)開機(jī)的時(shí)候,每一個(gè)io設(shè)備都會(huì)像cpu申請(qǐng)一些列的隨機(jī)端口,這種端口叫做io端口。在IBM PC體系結(jié)構(gòu)中,I/O地址空間一共提供了65,536個(gè)8位的I/O端口。正是這些io端口的存在,cpu可以與io設(shè)備進(jìn)行讀寫交互的過(guò)程。在執(zhí)行讀寫操作時(shí),CPU使用地址總線選擇所請(qǐng)求的I/O端口,使用數(shù)據(jù)總線在CPU寄存器和端口之間傳送數(shù)據(jù)。I/O端口還可以被映射到物理地址空間:因此,處理器和I/O設(shè)備之間的通信就可以直接使用對(duì)內(nèi)存進(jìn)行操作的匯編語(yǔ)言指令(例如,mov、and、or等等)?,F(xiàn)代的硬件設(shè)備更傾向于映射I/O,因?yàn)檫@樣處理的速度較快,并可以和DMA結(jié)合起來(lái)使用。這樣io在和內(nèi)存?zhèn)鲾?shù)據(jù)的時(shí)候就不需要通過(guò)cpu,cpu把總線的控制權(quán)交給DMA,每次io傳數(shù)據(jù)的時(shí)候就調(diào)用DMA一次,就把cpu給解放了出來(lái)。當(dāng)數(shù)據(jù)傳輸完了以后,DMA通知給cpu中斷一次。DMA在運(yùn)行的時(shí)候?qū)φ麄€(gè)總線有控制權(quán)限,當(dāng)cpu發(fā)現(xiàn)有其它進(jìn)程需要使用總線的時(shí)候,二者就會(huì)產(chǎn)生爭(zhēng)用。這個(gè)時(shí)候,在總線控制權(quán)的使用上,CPU和DMA具有相等的權(quán)限。只要CPU委托給了DMA,就不能隨意的收回這個(gè)委托,就要等待DMA的用完。

  如果沒有其它進(jìn)程可以運(yùn)行,或者其它進(jìn)程運(yùn)行的時(shí)間非常短,這個(gè)時(shí)候CPU發(fā)現(xiàn)我們的IO仍然沒有完成,那就意味著,CPU只能等待IO了。CPU在時(shí)間分配里面有個(gè)iowait的值,就是CPU在等待IO花費(fèi)的時(shí)間。有些是在同步調(diào)用過(guò)程中,CPU必須要等待IO的完成;否者CPU可以釋放IO的傳輸在背后自動(dòng)完成,CPU自己去處理其它的事情。等硬盤數(shù)據(jù)傳輸完成以后,硬盤只需要像CPU發(fā)起一個(gè)通知即可。CPU外圍有一種設(shè)備,這個(gè)設(shè)備叫做可編程中斷控制器。每一個(gè)硬件設(shè)備為了給CPU通信,在剛開機(jī)的時(shí)候,在BIOS實(shí)現(xiàn)檢測(cè)的時(shí)候,這個(gè)設(shè)備就要到可編程中斷控制器上去注冊(cè)一個(gè)所謂的中斷號(hào)。那么這個(gè)號(hào)碼就歸這個(gè)硬件使用了。當(dāng)前主機(jī)上可能有多個(gè)硬件,每一個(gè)硬件都有自己的號(hào)碼,CPU在收到中斷號(hào)以后,就能夠通過(guò)中斷相量表查找到那個(gè)硬件設(shè)備進(jìn)行中斷。并且就由對(duì)應(yīng)的IO端口過(guò)來(lái)處理了。

  CPU正在運(yùn)行其它進(jìn)程,當(dāng)一個(gè)中斷請(qǐng)求發(fā)過(guò)來(lái)的時(shí)候,CPU會(huì)立即終止當(dāng)前正在處理的進(jìn)程,而去處理中斷。當(dāng)前CPU掛起當(dāng)前正在處理的進(jìn)程,轉(zhuǎn)而去執(zhí)行中斷的過(guò)程,也叫做中斷切換。只不過(guò),這種切換在量級(jí)別上比進(jìn)程切換要低一些,而且任何中斷的優(yōu)先級(jí)通常比任何進(jìn)程也要高,因?yàn)槲覀冎傅氖怯布袛唷V袛噙€分為上半部和下半部,一般而言,上半部就是CPU在處理的時(shí)候,把它接進(jìn)來(lái),放到內(nèi)存中,如果這個(gè)事情不是特別緊急(CPU或者內(nèi)核會(huì)自己判斷),因此在這種情況下,CPU回到現(xiàn)場(chǎng)繼續(xù)執(zhí)行剛才掛起的進(jìn)程,當(dāng)這個(gè)進(jìn)程處理完了,再回過(guò)頭來(lái)執(zhí)行中斷的下半部分。

  在32位系統(tǒng)中,我們的內(nèi)存(線性地址)地址空間中,一般而言,低地址空間有一個(gè)G是給內(nèi)核使用的,上面3個(gè)G是給進(jìn)程使用的。但是應(yīng)該明白,其實(shí)在內(nèi)核內(nèi)存當(dāng)中,再往下,不是直接這樣劃分的。32位系統(tǒng)和64位系統(tǒng)可能不一樣(物理地址),在32位系統(tǒng)中,最低端有那么10多M的空間是給DMA使用的。DNA的總線寬度是很小的,可能只有幾位,所以尋址能力很有限,訪問的內(nèi)存空間也就很有限。如果DMA需要復(fù)制數(shù)據(jù),而且自己能夠?qū)ぶ肺锢韮?nèi)存,還可以把數(shù)據(jù)直接壯哉進(jìn)內(nèi)存中去,那么就必須保證DMA能夠?qū)ぶ纺嵌蝺?nèi)存才行。尋址的前提就是把最低地址斷M,DA的尋址范圍內(nèi)的那一段給了DMA。所以站在這個(gè)角度來(lái)說(shuō),我們的內(nèi)存管理是分區(qū)域的。

  在32位系統(tǒng)上,16M的內(nèi)存空間給了ZONE_DMA(DMA使用的物理地址空間);從16M到896M給了ZONE_NORMAL(正常物理地址空間),對(duì)于Linux操作系統(tǒng)來(lái)說(shuō),是內(nèi)核可以直接訪問的地址空間;從896M到1G這斷空間叫做"Reserved"(預(yù)留的物理地址空間);從1G到4G的這段物理地址空間中,我們的內(nèi)核是不能直接訪問的,要想訪問必須把其中的一段內(nèi)容映射到Reserved來(lái),在Reserved中保留出那一段內(nèi)存的地址編碼,我們內(nèi)核才能上去訪問,所以內(nèi)核不直接訪問大于1G的物理地址空間。所以在32位系統(tǒng)上,它訪問內(nèi)存當(dāng)中的數(shù)據(jù),中間是需要一個(gè)額外步驟的。

  在64位系統(tǒng)上,ZONE_DAM給了低端的1G地址空間,這個(gè)時(shí)候DMA的尋址能力被大大加強(qiáng)了;ZONE_DAM32可以使用4G的空間;而大于1G以上給劃分了ZONE_NORMAL,這段空間都可以被內(nèi)核直接訪問。所以在64位上,內(nèi)核訪問大于1G的內(nèi)存地址,就不需要額外的步驟了,效率和性能上也大大增加,這也就是為什么要使用64位系統(tǒng)的原因。

  在現(xiàn)在的PC架構(gòu)上,AMD,INTER都支持一種機(jī)制,叫做PEA(物理地址擴(kuò)展)。所謂PAE。指的是在32位系統(tǒng)的地址總線上,又?jǐn)U展了4位,使得32位系統(tǒng)上的地址空間可以達(dá)到64G。當(dāng)然在32為系統(tǒng)上,不管你的物理內(nèi)存有多大,單個(gè)進(jìn)程所使用的空間是無(wú)法擴(kuò)展的。因?yàn)樵?2位的系統(tǒng)上,線性地址空間只有4個(gè)G,而單個(gè)進(jìn)程能夠識(shí)別的訪問也只有3個(gè)G。

  linux的虛擬內(nèi)存子系統(tǒng)包含了以下幾個(gè)功能模塊:

  slab allocator,zoned buddy allocator,MMU,kswapd,bdflush

  slab allocator叫做slab分配器

  buddy allocator又叫做buddy system,叫做伙伴系統(tǒng),也是一種內(nèi)存分配器

  buddy system是工作在MMU之上的,而slab allocator又是工作在buddy system之上的。

  設(shè)置為小于等于1G,在數(shù)據(jù)庫(kù)服務(wù)器應(yīng)該勁量避免使用交換內(nèi)存

  3.在應(yīng)用服務(wù)器上,可以設(shè)置為RAM*0.5,當(dāng)然這個(gè)是理論值

  如果不的不使用交換內(nèi)存,應(yīng)該把交換內(nèi)存放到最靠外的磁道分區(qū)上,因?yàn)樽钔膺叺拇疟P的訪問速度最快。所以如果有多塊硬盤,可以把每塊硬盤的最外層的磁道拿一小部分出來(lái)作為交換分區(qū)。交換分區(qū)可以定義優(yōu)先級(jí),因此把這些硬盤的交換內(nèi)存的優(yōu)先級(jí)設(shè)置為一樣,可以實(shí)現(xiàn)負(fù)載均衡的效果。定義交換分區(qū)優(yōu)先級(jí)的方法為編輯/etc/fstab:

  /dev/sda1 swap swap pri=5 0 0

  /dev/sdb1 swap swap pri=5 0 0

  /dev/sdc1 swap swap pri=5 0 0

  /dev/sdd1 swap swap pri=5 0 0

  四.內(nèi)存耗盡時(shí)候的相關(guān)調(diào)優(yōu)參數(shù)

  當(dāng)Linux內(nèi)存耗盡的時(shí)候,它會(huì)殺死那些占用內(nèi)存最多的進(jìn)程,以下三種情況會(huì)殺死進(jìn)程:

  1.所有的進(jìn)程都是活動(dòng)進(jìn)程,這個(gè)時(shí)候想交換出去都沒有空閑的進(jìn)程

  2.沒有可用的page頁(yè)在ZONE_NORMAL中

  3.有其它新進(jìn)程啟動(dòng),申請(qǐng)內(nèi)存空間的時(shí)候,要找一個(gè)空閑內(nèi)存給做映射,但是這個(gè)時(shí)候找不到了

  一旦內(nèi)存耗盡的時(shí)候,操作系統(tǒng)就會(huì)啟用oom-kill機(jī)制。

  在/proc/PID/目錄下有一個(gè)文件叫做oom_score,就是用來(lái)指定oom的評(píng)分的,就是壞蛋指數(shù)。

  如果要手動(dòng)啟用oom-kill機(jī)制的話,只需要執(zhí)行echo f>/proc/sysrq-trigger即可,它會(huì)自動(dòng)殺掉我們指定的壞蛋指數(shù)評(píng)分最高的那個(gè)進(jìn)程

  可以通過(guò)echo n > /proc/PID/oom_adj來(lái)調(diào)整一個(gè)進(jìn)程的壞蛋評(píng)分指數(shù)。最終的評(píng)分指數(shù)就是2的oom_adj的值的N次方。假如我們的一個(gè)進(jìn)程的oom_adj的值是5,那么它的壞蛋評(píng)分指數(shù)就是2的5次方。

  如果想禁止oom-kill功能的使用可以使用vm.panic_on_oom=1即可。

  五.與容量有關(guān)的內(nèi)存調(diào)優(yōu)參數(shù):

  overcommit_memory,可用參數(shù)有3個(gè),規(guī)定是否能夠過(guò)量使用內(nèi)存:

  0:默認(rèn)設(shè)置,內(nèi)核執(zhí)行啟發(fā)式的過(guò)量使用處理

  1:內(nèi)核執(zhí)行無(wú)內(nèi)存的過(guò)量使用處理。使用這個(gè)值會(huì)增大內(nèi)存超載的可能性

  2:內(nèi)存的使用量等于swap的大小+RAM*overcommit_ratio的值。如果希望減小內(nèi)存的過(guò)度使用,這個(gè)值是最安全的

  overcommit_ratio:將overcommit_memory指定為2時(shí)候,提供的物理RAM比例,默認(rèn)為50

  六.與通信相關(guān)的調(diào)優(yōu)參數(shù)

  常見在同一個(gè)主機(jī)中進(jìn)行進(jìn)程間通信的方式:

  1.通過(guò)消息message;2.通過(guò)signal信號(hào)量進(jìn)行通信;3.通過(guò)共享內(nèi)存進(jìn)行通信,跨主機(jī)常見的通信方式是rpc

  以消息的方式實(shí)現(xiàn)進(jìn)程通信的調(diào)優(yōu)方案:

  msgmax:以字節(jié)為單位規(guī)定消息隊(duì)列中任意消息的最大允許大小。這個(gè)值一定不能超過(guò)該隊(duì)列的大小(msgmnb),默認(rèn)值為65536

  msgmnb:以字節(jié)為單位規(guī)定單一消息隊(duì)列的最大值(最大長(zhǎng)度)。默認(rèn)為65536字節(jié)

  msgmni:規(guī)定消息隊(duì)列識(shí)別符的最大數(shù)量(及隊(duì)列的最大數(shù)量)。64位架構(gòu)機(jī)器的默認(rèn)值為1985;32位架構(gòu)機(jī)器的默認(rèn)值為1736

  以共享內(nèi)存方式實(shí)現(xiàn)進(jìn)程通信的調(diào)優(yōu)方案:

  shmall:以字節(jié)為單位規(guī)定一次在該系統(tǒng)中可以使用的共享內(nèi)存總量(單次申請(qǐng)的上限)

  shmmax:以字節(jié)為單位規(guī)定每一個(gè)共享內(nèi)存片段的最大大小

  shmmni:規(guī)定系統(tǒng)范圍內(nèi)最大共享內(nèi)存片段。在64和32位的系統(tǒng)上默認(rèn)值都是4096

  七.與容量相關(guān)的文件系統(tǒng)可調(diào)優(yōu)參數(shù):

  file-max:列出內(nèi)核分配的文件句柄的最大值

  dirty_ratio:規(guī)定百分比值,當(dāng)臟數(shù)據(jù)達(dá)到系統(tǒng)內(nèi)存總數(shù)的這個(gè)百分比值后開始執(zhí)行pdflush,默認(rèn)為20

  dirty_background_ratio:規(guī)定百分比值,當(dāng)某一個(gè)進(jìn)程自己所占用的臟頁(yè)比例達(dá)到系統(tǒng)內(nèi)存總數(shù)的這個(gè)百分比值后開始在后臺(tái)執(zhí)行pdflush,默認(rèn)為10

  dirty_expire_centisecs:pdlush每隔百分之一秒的時(shí)間開啟起來(lái)刷新臟頁(yè),默認(rèn)值為3000,所以每隔30秒起來(lái)開始刷新臟頁(yè)

  dirty_writeback_centisecs:每隔百分之一秒開始刷新單個(gè)臟頁(yè)。默認(rèn)值為500,所以一個(gè)臟頁(yè)的存在時(shí)間達(dá)到了5秒,就開始刷新臟

  八.linux內(nèi)存常用的觀察指標(biāo)命令:

  Memory activity

  vmstat [interval] [count]

  sar -r [interval] [count]

  Rate of change in memory

  sar -R [interval] [count]

  frmpg/s:每秒釋放或者分配的內(nèi)存頁(yè),如果為正數(shù),則為釋放的內(nèi)存頁(yè);如果為負(fù)數(shù),則為分配的內(nèi)存頁(yè)

  bufpg/s:每秒buffer中獲得或者釋放的內(nèi)存頁(yè)。如果為正數(shù)則為獲得的內(nèi)存頁(yè),為負(fù)數(shù)。則為釋放的內(nèi)存頁(yè)

  campg/s:每秒cache中獲得或者釋放的內(nèi)存頁(yè)。如果為正數(shù)則為獲得的內(nèi)存頁(yè),為負(fù)數(shù)。則為釋放的內(nèi)存頁(yè)

  Swap activity

  sar -W [interval] [count]

  ALL IO

  sar -B [interval] [count]

  pgpgin/s:每秒從磁盤寫入到內(nèi)核的塊數(shù)量

  pgpgout/s:每秒從內(nèi)核寫入到磁盤的塊數(shù)量

  fault/s:每秒鐘出現(xiàn)的缺頁(yè)異常的個(gè)數(shù)

  majflt/s:每秒鐘出現(xiàn)的大頁(yè)異常的個(gè)數(shù)

  pgfree/s:每秒回收回來(lái)的頁(yè)面?zhèn)€數(shù)

138680