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/