1. 程式人生 > >Linux運維之系統性能---vmstat工具分析內存的瓶頸

Linux運維之系統性能---vmstat工具分析內存的瓶頸

內存管理 但是 劃分 塊設備 發生 entry use ges span

  為了提高磁盤存取效率, Linux做了一些精心的設計, 除了對dentry進行緩存(用於VFS,加速文件路徑名到inode的轉換), 還采取了兩種主要Cache方式:Buffer Cache和Page Cache.前者針對磁盤塊的讀寫,後者針對文件inode的讀寫.這些Cache有效縮短了I/O系統調用(比如read,write,getdents)的時間.

內存活動基本上可以用3個數字來量化:活動虛擬內存總量,交換(swapping)率和調頁(paging)率.其中第一個數字表明內存的總需求量,後兩個數字表示那些內存中有多少比例正處在使用之中.目標是減少內存活動或增加內存量,直到調頁率保持在一個可以接受的水平上為止.

活動虛擬內存的總量(VM)=實際內存大小(size of real memory)(物理內存)+使用的交換空間大小(amount of swap space used)

當程序運行需要的內存大於物理內存時,UNIX系統采用了調頁機制,即系統copy一些內存中的頁面到磁盤上,騰出來空間供進程使用。
  大多數系統可以忍受偶爾的調頁,但是頻繁的調頁會使系統性能急劇下降。

UNIX內存管理:UNIX系統通過2種方法進行內存管理,“調頁算法”,“交換技術”。
調頁算法是將內存中最近不常使用的頁面換到磁盤上,把常使用的頁面(活動頁面)保留在內存中供進程使用。
交換技術是系統將整個進程,而不是部分頁面,全部換到磁盤上。正常情況下,系統會發生一些交換過程。
當內存嚴重不足時,系統會頻繁使用調頁和交換,這增加了磁盤I/O的負載。進一步降低了系統對作業的執行速度,即系統I/O資源問題又會影響到內存資源的分配

Unix的虛擬內存

  Unix的虛擬內存是一個十分復雜的子系統,它實現了進程間代碼與數據共享機制的透明性,並能夠分配比系統現有物理內存更多的內存,某些操作系統的虛存甚至能通過提供緩存功能影響到文件系統的性能,各種風格的UNIX的虛存的實現方式區別很大,但都離不開下面的4個概念。

1:實際內存
  實際內存是指一個系統中實際存在的物理內存,稱為RAM。實際內存是存儲臨時數據最快最有效的方式,因此必須盡可能地分配給應用程序,現在的RAM的形式有多種:SIMM、DIMM、Rambus、DDR等,很多RAM都可以使用糾錯機制(ECC)。

2:交換空間
  交換空間是專門用於臨時存儲內存的一塊磁盤空間,通常在頁面調度和交換進程數據時使用,通常推薦交換空間的大小應該是物理內存的二到四倍

3:頁面調度
  頁面調度是指從磁盤向內存傳輸數據,以及相反的過程,這個過程之所以被稱為頁面調度,是因為Unix內存被平均劃分成大小相等的頁面;通常頁面大小為4KB和8KB(在Solaris中可以用pagesize命令查看)。當可執行程序開始運行時,它的映象會一頁一頁地從磁盤中換入,與此類似,當某些內存在一段時間內空閑,就可以把它們換出到交換空間中,這樣就可以把空閑的RAM交給其他需要它的程序使用。

4:交換
頁面調度通常容易和交換的概念混淆,頁面調度是指把一個進程所占內存的空閑部分傳輸到磁盤上,而交換是指當系統中實際的內存已不夠滿足新的分配需求時,把整個進程傳輸到磁盤上,交換活動通常意味著內存不足。

[root@localhost ~]# vmstat -n 3       (每個3秒刷新一次)
procs-----------memory--------------------swap-- ----io---- --system---- ------cpu--------
r   b    swpd   free       buff       cache       si   so    bi    bo   in      cs        us   sy   id   wa
1  0    144   186164   105252   2386848      0    0     18   166   83     2          48   21   31   0
2  0    144   189620   105252   2386848      0    0      0   177   1039   1210     34   10   56   0
0  0    144   214324   105252   2386848      0    0      0    10   1071   670      32    5    63   0
0  0    144   202212   105252   2386848      0    0      0   189   1035   558      20   3   77   0
2  0    144   158772   105252   2386848      0    0      0   203   1065   2832      70    14    15   0

MEMORY
-swap:切換到交換內存上的內存(默認以KB為單位)
如果SWAP的值不為0,或者還比較大,比如超過100M了,但是SI,SO的值長期為0,這種情況我們可以不用擔心,不會影響系統性能。

-free:空閑的物理內存 - buff:作為buffer cache的內存,對塊設備的讀寫進行緩沖
-cache:作為page cache的內存,文件系統的cache
如果cache的值大的時候,說明cache處的文件數多,如果頻繁訪問到的文件都能被cache處,那麽磁盤的讀IO bi會非常小。 SWAP
-si:交換內存使用,由磁盤調入內存
-so:交換內存使用,由內存調入磁盤
內存夠用的時候,這2個值都是0,如果這2個值長期大於0時,系統性能會受到影響,磁盤IO和CPU資源都會被消耗。 有些人看到空閑內存(FREE)很少的或接近於0時,就認為內存不夠用了,實際上不能光看這一點,Linux是搶占內存式的OS,還要結合si,so,如果free很少,但是si,so也很少(大多時候是0),那麽不用擔心,系統性能這時不會受到影響的。

Linux運維之系統性能---vmstat工具分析內存的瓶頸