Centos 系統性能優化即查看

文 | 諸葛運帷 子龍兄

cpu
一般查看top 看其1分鐘,5分鐘.15分鐘的負載情況,若5分鐘和15分鐘的值超過了cpu個數的兩倍,則一般需要優化。若低於cpu個數,則說明系統運行正常。若長期低於1,則表示系統處於空閒狀態。
vmstat 命令也可以查看 進程,內存,swap,磁盤io,cpu使用等。


Centos 系統性能優化即查看

Centos 系統性能優化即查看


cpu顯示了用戶進程和內核進程所消耗的cpu時間百分比,us較高說明用戶進程消耗的cpu時間多,
us+sy產考值一般為80%,若長期大於80%則表示cpu不足。
swpd 表示交換分區使用,一般si、so的值為0,若兩個值長期不為0則表示系統內存不足,需要增加系統內存。
io表示磁盤讀寫,bi+bo產考值為1000,若大於1000則wa值較大,表示系統磁盤io有問題。
system項顯示採集間隔內發生的中斷數,in和cs這兩個值越大,會看到由內核消耗的cpu時間會越多。
查看進程中最佔CPU的線程
top -p PID -H


Centos 系統性能優化即查看

內存top命令進行查看

Centos 系統性能優化即查看

mem 表示內存 依次為總內存 空閒內存 已使用的 用於緩存文件系統的內存swap 表示交換 總大小 空閒的交換分區 使用的交換分區 可用的交換分區。
vmstat 命令查看

Centos 系統性能優化即查看

swpd 表示切換到內存交換區的內存數量,以KB 為單位,swpd的值為0,若不為0且磁盤調入內存的值si和由內存調入磁盤的值so均為0,表示系統暫時沒進行內存頁交換,內存資源充足,系統性能暫時沒什麼問題。
硬盤IO
iostat 命令查看

Centos 系統性能優化即查看

tps表示每秒鐘發送的I/O 請求數,kB_read/s 表示每秒讀取的數據塊,kB_wrtn/s 表示每秒寫入的數據塊,kB_read 表示讀取的所有數據塊,kb_wrtn表示寫入的所有數據塊,


內存簡介
物理內存和虛擬內存
直接從物理內存讀寫數據要比從硬盤讀寫數據要快的多,因此,我們希望所有數據的讀取和寫入都在內存完成,而內存是有限的,這樣就引出了物理內存與虛擬內存的概念。
物理內存就是系統硬件提供的內存大小,是真正的內存,相對於物理內存,
在linux下還有一個虛擬內存的概念,虛擬內存就是為了滿足物理內存的不足而提出的策略,它是利用磁盤空間虛擬出的一塊邏輯內存,用作虛擬內存的磁盤空間被稱為交換空間(Swap Space)。
作為物理內存的擴展,linux會在物理內存不足時,使用交換分區的虛擬內存,更詳細的說,就是內核會將暫時不用的內存塊信息寫到交換空間,這樣以來,物理內存得到了釋放,這塊內存就可以用於其它目的,當需要用到原始的內容時,這些信息會被重新從交換空間讀入物理內存。
linux的內存管理採取的是分頁存取機制,為了保證物理內存能得到充分的利用,內核會在適當的時候將物理內存中不經常使用的數據塊自動交換到虛擬內存中,而將經常使用的信息保留到物理內存。
要深入瞭解linux內存運行機制,需要知道下面提到的幾個方面:

首先,Linux系統會不時的進行頁面交換操作,以保持儘可能多的空閒物理內存,即使並沒有什麼事情需要內存,Linux也會交換出暫時不用的內存頁面。這可以避免等待交換所需的時間。
其次,linux進行頁面交換是有條件的,不是所有頁面在不用時都交換到虛擬內存,linux內核根據”最近最經常使用“算法,僅僅將一些不經常使用的頁面文件交換到虛擬內存,有時我們會看到這麼一個現象:linux物理內存還有很多,但是交換空間也使用了很多。其實,這並不奇怪,例如,一個佔用很大內存的進程運行時,需要耗費很多內存資源,此時就會有一些不常用頁面文件被交換到虛擬內存中,但後來這個佔用很多內存資源的進程結束並釋放了很多內存時,剛才被交換出去的頁面文件並不會自動的交換進物理內存,除非有這個必要,那麼此刻系統物理內存就會空閒很多,同時交換空間也在被使用,就出現了剛才所說的現象了。關於這點,不用擔心什麼,只要知道是怎麼一回事就可以了。
最後,交換空間的頁面在使用時會首先被交換到物理內存,如果此時沒有足夠的物理內存來容納這些頁面,它們又會被馬上交換出去,如此以來,虛擬內存中可能沒有足夠空間來存儲這些交換頁面,最終會導致linux出現假死機、服務異常等問題,linux雖然可以在一段時間內自行恢復,但是恢復後的系統已經基本不可用了。

因此,合理規劃和設計linux內存的使用,是非常重要的.
操作系統有一塊物理內存(中間的部分),有兩個進程(實際會更多)P1 和 P2,操作系統偷偷地分別告訴 P1 和 P2,我的整個內存都是你的,隨便用,管夠。可事實上呢,操作系統只是給它們畫了個大餅,這些內存說是都給了 P1 和 P2,實際上只給了它們一個序號而已。只有當 P1 和 P2 真正開始使用這些內存時,系統才開始使用輾轉挪移,拼湊出各個塊給進程用,P2 以為自己在用 A 內存,實際上已經被系統悄悄重定向到真正的 B 去了,甚至,當 P1 和 P2 共用了 C 內存,他們也不知道。
操作系統的這種欺騙進程的手段,就是虛擬內存。對 P1 和 P2 等進程來說,它們都以為自己佔用了整個內存,而自己使用的物理內存的哪段地址,它們並不知道也無需關心。
分頁和頁表
虛擬內存是操作系統裡的概念,對操作系統來說,虛擬內存就是一張張的對照表,
在系統啟動時,操作系統將整個物理內存以 4K 為單位,劃分為各個頁。之後進行內存分配時,都以頁為單位,那麼虛擬內存頁對應物理內存頁的映射表就大大減小了,4G 內存,只需要 8M 的映射表即可,一些進程沒有使用到的虛擬內存,也並不需要保存映射關係,而且Linux 還為大內存設計了多級頁表,可以進一頁減少了內存消耗。操作系統虛擬內存到物理內存的映射表,就被稱為頁表。

內存尋址和分配
我們知道通過虛擬內存機制,每個進程都以為自己佔用了全部內存,進程訪問內存時,操作系統都會把進程提供的虛擬內存地址轉換為物理地址,再去對應的物理地址上獲取數據。CPU 中有一種硬件,內存管理單元 MMU(Memory Management Unit)專門用來將翻譯虛擬內存地址。CPU 還為頁表尋址設置了緩存策略,由於程序的局部性,其緩存命中率能達到 98%。
以上情況是頁表內存在虛擬地址到物理地址的映射,而如果進程訪問的物理地址還沒有被分配,系統則會產生一個缺頁中斷,在中斷處理時,系統切到內核態為進程虛擬地址分配物理地址。
虛擬內存不僅通過內存地址轉換解決了多個進程訪問內存衝突的問題,還帶來更多的益處。

Centos 系統性能優化即查看

內存的監控
free 命令

Centos 系統性能優化即查看

total:物理內存的總大小。used:已經使用的物理內存多小。
free:空閒的物理內存值。
shared:多個進程共享的內存值。
buffers/cached:磁盤緩存的大小。

第二行Mem:代表物理內存使用情況。第三行(-/+ buffers/cached):代表磁盤緩存使用狀態。


第四行:Swap表示交換空間內存使用狀態。
free命令輸出的內存狀態,可以通過兩個角度來查看:一個是從內核的角度來看,一個是從應用層的角度來看的。
1.從內核的角度來查看內存的狀態
若簡單的從free 去看系統剩餘空間的話-----內核完全控制著內存的使用情況,linux會在需要內存的時候,或在系統運行逐步推進時,將buffers和cached狀態的內存變為free狀態的內存,以供系統使用。
2.從應用層的角度來看系統內存的使用狀態
也就是linux上運行的應用程序可以使用的內存大小,
41940+(465404+12714880)=13222224
通過這個等式可知,應用程序可用的物理內存值是Mem項的free值加上buffers和cached值之和,也就是說,這個free值是包括buffers和cached項大小的,
對於應用程序來說,buffers/cached佔有的內存是可用的,因為buffers/cached是為了提高文件讀取的性能,當應用程序需要用到內存的時候,buffers/cached會很快地被回收,以供應用程序使用。
buffers與cached都是內存操作,用來保存系統曾經打開過的文件以及文件屬性信息,這樣當操作系統需要讀取某些文件時,會首先在buffers與cached內存區查找,如果找到,直接讀出傳送給應用程序,如果沒有找到需要數據,才從磁盤讀取,這就是操作系統的緩存機制,通過緩存,大大提高了操作系統的性能。但buffers與cached緩衝的內容卻是不同的。

buffers是用來緩衝塊設備做的,它只記錄文件系統的元數據(metadata)以及 tracking in-flight pages,而cached是用來給文件做緩衝。更通俗一點說:buffers主要用來存放目錄裡面有什麼內容,文件的屬性以及權限等等。而cached直接用來記憶我們打開過的文件和程序。
交換空間swap的使用
1.創建swap交換空間
創建交換空間所需的交換文件是一個普通的文件,但是,創建交換文件與創建普通文件不同,必須通過dd命令來完成,同時這個文件必須位於本地硬盤上,不能在網絡文件系統(NFS)上創建swap交換文件。例如:
[root@localhost ~]# dd if=/dev/zero of=/data/swapfile bs=1024 count=65536
65536+0 records in
65536+0 records out
這樣就創建一個有連續空間的交換文件,大小為60M左右,關於dd命令做簡單的講述:
if=輸入文件,或者設備名稱。
of=輸出文件或者設備名稱。
ibs=bytes 表示一次讀入bytes 個字節(即一個塊大小為 bytes 個字節)。
obs=bytes 表示一次寫bytes 個字節(即一個塊大小為 bytes 個字節)。
bs=bytes,同時設置讀寫塊的大小,以bytes為單位,此參數可代替 ibs 和 obs。
count=blocks 僅拷貝blocks個塊。
skip=blocks 表示從輸入文件開頭跳過 blocks 個塊後再開始複製。
seek=blocks表示從輸出文件開頭跳過 blocks 個塊後再開始複製。(通常只有當輸出文件是磁盤或磁帶時才有效)

這裡的輸入設備/dev/zero代表一個輸出永遠為0的設備文件,使用它作輸入可以得到全為空的文件。
2.激活和使用swap
首先通過mkswap命令指定作為交換空間的設備或者文件:
[root@localhost ~]#mkswap /data/swapfile
Setting up swapspace version 1, size = 67104 kB
[root@localhost backup]# free
total used free shared buffers cached
Mem: 2066632 1998188 68444 0 26160 1588044
-/+ buffers/cache: 383984 1682648
Swap: 4088500 101036 3987464
從上面輸出可知,我們指定了一個67104 kB的交換空間,而此時新建的交換空間還未被使用,下面簡單介紹下mkswap命令,mkswap的一般使用格式為:
mkswap [參數] [設備名稱或文件][交換區大小]
參數:
-c:建立交換區前,先檢查是否有損壞的區塊。
-v0:建立舊式交換區,此為預設值。
-v1:建立新式交換區。
交換區大小:指定交換區的大小,單位為1024字節。
設置交換分區後,接著通過swapon命令激活swap:
[root@localhost ~]#/usr/sbin/swapon /data/swapfile
[root@localhost backup]# free
total used free shared buffers cached
Mem: 2066632 1997668 68964 0 27404 1588880
-/+ buffers/cache: 381384 1685248
Swap: 4154028 100976 4053052
通過free命令可以看出,swap大小已經由4088500k變為4154028k,相差的值是60M左右,剛好等於我們增加的一個交換文件大小,這說明新增的交換分區已經可以使用了,但是如果linux重啟,那麼新增的swap空間將變得不可用,因此需要在/etc/fstab中添加自動加載設置:

/data/swapfile none swap sw 0 0
如此以來,linux在重啟後就可以實現自動加載swap分區了。其實linux在啟動過程中會執行“swapon -a”命令,此命令會加載列在/etc/fstab中的所有交換空間。
3.移除swap
通過swapoff即可移除一個交換空間
[root@localhost ~]#/usr/sbin/swapoff /data/swapfile
其實也可以通過“swapoff -a”移除在/etc/fstab中定義的所有交換空間,這裡的“swapoff -a”與上面提到的“swapon -a”對應。執行“swapoff -a”後,free命令輸出如下:
[root@localhost backup]# free
total used free shared buffers cached
Mem: 2066632 2048724 17908 0 30352 1642748
-/+ buffers/cache: 375624 1691008
Swap: 0 0 0



IT運維之眼-“諸葛運帷” 業務級運維監控管理平臺,企業端到移動端的運維監控整體解決方案。系統以業務系統監控為主線,基於“業務、軟件、網絡、設備、動環”多個監控視角的運維體系架構,打造了一個多維度可視化的綜合運維監控管理平臺。系統以故障提前預警、問題快速定位為核心。切實保障信息系統的安全穩定運行。


分享到:


相關文章: