首頁 > 軟體

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

2020-06-16 18:00:49

1.Linux效能分析的目的
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)經驗積累
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 輸出內容的含義,並能靈活應用,那對系統效能分析的能力就算是基本掌握了。

Linux vmstat 命令詳解 http://www.linuxidc.com/Linux/2013-03/80983.htm

Linux下vmstat 顯示結果詳解 http://www.linuxidc.com/Linux/2013-01/77497.htm

Linux監控工具之vmstat 詳解 http://www.linuxidc.com/Linux/2012-09/71295.htm

Linux vmstat命令實戰詳解 http://www.linuxidc.com/Linux/2012-06/61771.htm

Linux vmstat監控系統負載 http://www.linuxidc.com/Linux/2012-01/51340.htm

vmstat命令詳解——Linux效能分析 http://www.linuxidc.com/Linux/2014-06/102884.htm

下面是vmstat命令的輸出結果:
# vmstat 1 5

對輸出解釋如下:
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)

 

本文永久更新連結地址http://www.linuxidc.com/Linux/2015-05/117056.htm


IT145.com E-mail:sddin#qq.com