linux 記憶體負載分析

pingley發表於2012-03-14
linux 記憶體負載分析
衡量記憶體負載的一個很重要的指標就是頁面置換的頻率。當linux系統頻繁的對頁進行換進換出
的時候,說明實體記憶體不過,不得不進行頻繁的置換頁面。
使用vmstat(virtual memory statistics)進行記憶體負載分析
[oracle@zeng ~]$ vmstat 2 3
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 0  0      0 758668  19688  64508   56    0     0   256  263  118  3 22 74  2  0
 0  0      0 758668  19688  64532    0    0     0     0   21   10  0  1 99  0  0
 0  0      0 758668  19688  64532    0    0     0     0   19    7  0  1 100  0  0
對於記憶體負載分析其中關鍵的欄位是:
swpd:虛擬記憶體的使用總量。
si:每秒從虛擬記憶體讀入記憶體的大小。
so:每秒從記憶體寫入虛擬記憶體的大小。
如果這3個欄位的值比較高說明出現了記憶體瓶頸。
也可以使用free 來標識記憶體的負載情況.
[oracle@zeng ~]$ free
             total       used       free     shared    buffers     cached
Mem:        911564     155492     756072          0      20564      65696
-/+ buffers/cache:      69232     842332
Swap:      3481592          0    3481592
如果發現linux 系統使用了其中大部分的實體記憶體。這是正常的linux使用這些實體記憶體來
提升系統的效能。其中要注意的是swap 那一行.
[oracle@zeng ~]$ free -s 3 
             total       used       free     shared    buffers     cached
Mem:        911564     155748     755816          0      20620      65732
-/+ buffers/cache:      69396     842168
Swap:      3481592          0    3481592

             total       used       free     shared    buffers     cached
Mem:        911564     155748     755816          0      20620      65732
-/+ buffers/cache:      69396     842168
Swap:      3481592          0    3481592
-s 選項表示間隔多少秒,報告一次記憶體負載情況。使用Ctrl+C退出。可以把上面
的輸出重定向到檔案。
也可以透過檢視虛擬檔案 /proc/meminfo 來檢視記憶體的負載情況。
[oracle@zeng ~]$ cat /proc/meminfo  
MemTotal:         911564 kB
MemFree:          239024 kB
Buffers:           23304 kB
Cached:           513724 kB
SwapCached:            0 kB
Active:           216272 kB
Inactive:         387160 kB
如果你在輸出中看到SwapFree 欄位的值較低,說明你的系統記憶體負載很高,需要新增
額外的記憶體,或者監控系統程式對記憶體的使用情況,把一些不需要的程式結束掉。緩解
記憶體負載。vmstat,free,cat /proc/meminfo 都可以和watch 一起配合使用。
使用sar 進行實時,當天,當天前本月的其他天的記憶體負載情況分析。
使用sar 進行歷史記憶體發展分析.
[oracle@zeng ~]$ sar -B -f /var/log/sa/sa08
Linux 2.6.32-71.el6.i686 (zeng)         03/08/2012      _i686_  (1 CPU)

09:50:01 AM       LINUX RESTART

10:00:02 AM  pgpgin/s pgpgout/s   fault/s  majflt/s  pgfree/s pgscank/s pgscand/s pgsteal/s    %vmeff
10:10:01 AM      0.00     79.83      0.00    124.61      0.00      0.00      0.00      0.00      0.00
10:20:01 AM      0.00      1.42      0.00     51.98      0.00      0.00      0.00      0.00      0.00
10:30:01 AM      0.00    113.79      0.00    135.36      0.00      0.00      0.00      0.00      0.00
10:40:02 AM      0.00      0.02      0.00     32.64      0.00      0.00      0.00      0.00      0.00
10:50:01 AM      0.00      0.02      0.00     33.78      0.00      0.00      0.00      0.00  
-B 表示報告系統的分析統計情況。
pgpgin/s :每秒從磁碟中調入的大小,bytes。
pgpgout/s :每秒從記憶體中換出的大小,bytes。
-f 表示要從哪個歷史日誌檔案中讀取相應的報告資料。/var/log/sa/saNN NN表示本月的天數。
[oracle@zeng ~]$ sar -W -f /var/log/sa/sa13
Linux 2.6.32-71.el6.i686 (zeng)         03/13/2012      _i686_  (1 CPU)

12:57:10 PM       LINUX RESTART

01:00:02 PM  pswpin/s pswpout/s
01:10:02 PM     20.41      0.00
01:20:01 PM     58.31      0.00
01:30:02 PM     19.76      0.00
01:40:01 PM     20.00      0.00
01:50:01 PM     19.75      0.00
02:00:01 PM     19.98      0.00
02:10:01 PM     33.62      0.00
02:20:01 PM     20.94      0.00
02:30:01 PM     20.84      0.00
02:40:01 PM     20.40      0.00
-W 表示報告交換的統計情況。
pswpin/s:每秒置換進來的大小。
pswpout/s:每秒置換出的大小。
如果這兩個值較高,說明記憶體負載大。
使用sar 進行實時記憶體負載分析.
[oracle@zeng ~]$ sar -W 3 5
Linux 2.6.32-71.el6.i686 (zeng)         03/14/2012      _i686_  (1 CPU)

10:54:01 AM  pswpin/s pswpout/s
10:54:04 AM     22.61      0.00
10:54:07 AM     17.02      0.00
10:54:10 AM     22.38      0.00
10:54:13 AM     16.84      0.00
10:54:16 AM     22.30      0.00
Average:        20.24      0.00
3 表示報告的時間間隔s。
5 表示報告的次數。
使用sar 進行當前記憶體負載分析。
[oracle@zeng ~]$ sar -W
Linux 2.6.32-71.el6.i686 (zeng)         03/14/2012      _i686_  (1 CPU)

09:48:13 AM       LINUX RESTART
09:50:02 AM  pswpin/s pswpout/s
10:00:01 AM      1.00      0.00
10:10:01 AM      0.61      0.00
10:20:01 AM     19.49      0.00
10:30:02 AM     29.70      0.00
10:40:01 AM     38.41      0.00
10:50:02 AM     20.49      0.00
Average:        18.07      0.00
[oracle@zeng ~]$ sar -r
Linux 2.6.32-71.el6.i686 (zeng)         03/14/2012      _i686_  (1 CPU)

09:48:13 AM       LINUX RESTART

09:50:02 AM kbmemfree kbmemused  %memused kbbuffers  kbcached  kbcommit   %commit
10:00:01 AM    755660    155904     17.10     20240     65580    176952      4.03
10:10:01 AM    755684    155880     17.10     20628     65732    176056      4.01
10:20:01 AM    209720    701844     76.99     23648    537324    693520     15.79
10:30:02 AM    177240    734324     80.56     24452    568336    693476     15.79
10:40:01 AM     60144    851420     93.40     86464    576484    694376     15.81
10:50:02 AM     59284    852280     93.50     87264    576512    694376     15.81
Average:       336289    575275     63.11     43783    398328    521459     11.87
-r 表示報告記憶體使用率統計。
欄位解釋:
kbmemfree  空閒記憶體大小。
kbmemused  已被使用的記憶體大小。
%memused   被使用的記憶體佔總記憶體的百分比。
kbbuffers  被用作buffer 的記憶體大小。
kbcached   被用作cache 的記憶體大小。
kbcommit   確保當前的工作負載,所需要的記憶體大小。以保證不需要使用到swap。
%commit    kbcommit 與 RAM+swap 的比值。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26110315/viewspace-718485/,如需轉載,請註明出處,否則將追究法律責任。

相關文章