天天看點

Linux系統性能調優之性能分析

  1、性能分析的目的

  1)找出系統性能瓶頸(包括硬體瓶頸和軟體瓶頸);

  2)提供性能優化的方案(更新硬體?改進系統系統結構?);

  3)達到合理的硬體和軟體配置;

  4)使系統資源使用達到最大的平衡。(一般情況下系統良好運作的時候恰恰各項資源達到了一個平衡體,任何一項資源的過渡使用都會造成平衡體系破壞,進而造成系統負載極高或者響應遲緩。比如cpu過渡使用會造成大量程序等待cpu資源,系統響應變慢,等待會造成程序數增加,程序增加又會造成記憶體使用增加,記憶體耗盡又會造成虛拟記憶體使用,使用虛拟記憶體又會造成磁盤io增加和cpu開銷增加)

  2、影響性能的因素

  1)cpu(cpu的速度與性能很大一部分決定了系統整體的性能,是否使用smp)

  2)記憶體(實體記憶體不夠時會使用交換記憶體,使用swap會帶來磁盤i0和cpu的開銷)

  3)硬碟(存儲系統)

  a、raid技術使用(raid0,raid1,raid5,raid0+1)

  b、小檔案讀寫瓶頸是磁盤的尋址(tps),大檔案讀寫的性能瓶頸是帶寬

  c、linux可以利用空閑記憶體作檔案系統通路的cache,是以系統記憶體越大存儲系統的性能也越好

  4)網絡帶寬。

  3、性能分析的步驟

  1)對資源的使用狀況進行長期的監控和資料采集(nagios、cacti)

  2)使用常見的性能分析工具(vmstat、top、free、iostat等)

  3)經驗積累

  b、性能瓶頸可能是因為程式差/記憶體不足/磁盤瓶頸,但最終表現出的結果就是cpu耗盡,系統負載極高,響應遲緩,甚至暫時失去響應

  c、實體記憶體不夠時會使用交換記憶體,使用swap會帶來磁盤i0和cpu的開銷

  e、可能造成記憶體瓶頸問題:高并發使用者通路、系統程序多,java記憶體洩露……

  f、可能造成磁盤io瓶頸問題:生成cache檔案,資料庫頻繁更新,或者查詢大表……

  4、vmstat詳細介紹

  vmstat是一個很全面的性能分析工具,可以觀察到系統的程序狀态、記憶體使用、虛拟記憶體使用、磁盤的io、中斷、上下文切換、cpu使用等。對于 linux 的性能分析,100%了解 vmstat 輸出内容的含義,并能靈活應用,那對系統性能分析的能力就算是基本掌握了。

  下面是vmstat指令的輸出結果:

[root@monitor-www ~]# vmstat 1 5

procs         —————memory—————      ——swap—— ——io——  ——system——   ——cpu——

r   b    swpd     free       buff      cache   si    so    bi     bo      in    cs    us sy  id wa st

1   0    84780    909744   267428    1912076   0     0     20     94       0     0     2  1  95  1  0

1   2    84780    894968   267428    1912216   0     0      0   1396    2301 11337     8  3  89  0  0

1   0    84780    900680   267428    1912340   0     0     76   1428    1854  8082     7  2  90  0  0

1   0    84780    902544   267432    1912548   0     0    116    928    1655  7502     7  2  92  0  0

2   0    84780    900076   267432    1912948   0     0    180    904    1963  8703    10  3  87  0  0

 對輸出解釋如下:

  1)procs

  a.r清單示運作和等待cpu時間片的程序數,這個值如果長期大于系統cpu個數,就說明cpu資源不足,可以考慮增加cpu;

  b.b清單示在等待資源的程序數,比如正在等待i/o或者記憶體交換等。

  2)memory

  a、swpd清單示切換到記憶體交換區的記憶體數量(以kb為機關)。如果swpd的值不為0或者比較大,而且si、so的值長期為0,那麼這種情況一般不用擔心,不會影響系統性能;

  b、free清單示目前空閑的實體記憶體數量(以kb為機關);

  c、buff清單示buffers cache的記憶體數量,一般對塊裝置的讀寫才需要緩沖;

  d、cache清單示page cached的記憶體數量,一般作檔案系統的cached,頻繁通路的檔案都會被cached。如果cached值較大,就說明cached檔案數較多。如果此時io中的bi比較小,就說明檔案系統效率比較好。

  3)swap

  a、si清單示由磁盤調入記憶體,也就是記憶體進入記憶體交換區的數量;

  b、so清單示由記憶體調入磁盤,也就是記憶體交換區進入記憶體的數量

  c、一般情況下,si、so的值都為0,如果si、so的值長期不為0,則表示系統記憶體不足,需要考慮是否增加系統記憶體。

  4)io

  a、bi清單示從塊裝置讀入的資料總量(即讀磁盤,機關kb/秒)

  b、bo清單示寫入到塊裝置的資料總量(即寫磁盤,機關kb/秒)

  這裡設定的bi+bo參考值為1000,如果超過1000,而且wa值比較大,則表示系統磁盤io性能瓶頸。

  5)system

  a、in清單示在某一時間間隔中觀察到的每秒裝置中斷數;

  b、cs清單示每秒産生的上下文切換次數。

  上面這兩個值越大,會看到核心消耗的cpu時間就越多。

  6)cpu

  a、us列顯示了使用者程序消耗cpu的時間百分比。us的值比較高時,說明使用者程序消耗的cpu時間多,如果長期大于50%,需要考慮優化程式啥的。

  b、sy列顯示了核心程序消耗cpu的時間百分比。sy的值比較高時,就說明核心消耗的cpu時間多;如果us+sy超過80%,就說明cpu的資源存在不足。

  c、id列顯示了cpu處在空閑狀态的時間百分比;

  d、wa清單示io等待所占的cpu時間百分比。wa值越高,說明io等待越嚴重。如果wa值超過20%,說明io等待嚴重。

  e、st列一般不關注,虛拟機占用的時間百分比。 (linux 2.6.11)

最新内容請見作者的github頁:http://qaseven.github.io/