linux系統性能調優第一步——性能分析(vmstat)

性能調優的第一步是性能分析,下面從性能分析着手進行一些介紹,尤爲對linux性能分析工具vmstat的用法和實踐進行詳細介紹。php

——————————————————————————————————————————java

1.性能分析的目的linux

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

2)×××能優化的方案(升級硬件?改進系統系統結構?);web

3)達到合理的硬件和軟件配置;數據庫

4) 使系統資源使用達到最大的平衡。(通常狀況下系統良好運行的時候偏偏各項資源達到了一個平衡體,任何一項資源的過渡使用都會形成平衡體系破壞,從而形成系 統負載極高或者響應遲緩。好比CPU過渡使用會形成大量進程等待CPU資源,系統響應變慢,等待會形成進程數增長,進程增長又會形成內存使用增長,內存耗 盡又會形成虛擬內存使用,使用虛擬內存又會形成磁盤IO增長和CPU開銷增長)網絡

2.影響性能的因素併發

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

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)經驗積累

a.應用程序設計的缺陷和數據庫查詢的濫用最有可能致使性能問題

b.性能瓶頸多是由於程序差/內存不足/磁盤瓶頸,但最終表現出的結果就是CPU耗盡,系統負載極高,響應遲緩,甚至暫時失去響應

c.物理內存不夠時會使用交換內存,使用swap會帶來磁盤I0和cpu的開銷

d.可能形成cpu瓶頸的問題:頻繁執Perl,php,java程序生成動態web;數據庫查詢大量的where子句、order by/group by排序……

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)

相關文章
相關標籤/搜索