“這個系統(tǒng)好慢、網站又打不開了,太卡了,又沒響應了!”
相信大家都遇到過這種抱怨,這是應用系統(tǒng)出現了性能問題,需要性能調優(yōu)。
性能調優(yōu),要求對計算機硬件、操作系統(tǒng)和應用有相當深入的了解。
調節(jié)三者之間的關系,實現整個系統(tǒng)(硬件、操作系統(tǒng)、應用)的性能最優(yōu)化,不斷滿足現有的業(yè)務需求。
說到底就倆原因:一是獲得更好的系統(tǒng)性能;二是滿足不斷增加的業(yè)務需求。
通過性能調優(yōu),可以用更少的硬件資源,支撐更大量的業(yè)務發(fā)展,從而達到節(jié)省硬件投資的目的。
同時,可以在資源有限,不能擴容的情況下,提升系統(tǒng)的響應能力,從而為用戶帶來更好的使用體驗。
我們重點說一下在進行性能優(yōu)化時,硬件、操作系統(tǒng)、應用程序這三大系統(tǒng),需要關注的一些細節(jié)和具體的優(yōu)化思路。
1.硬件優(yōu)化。主要是對硬件選型,例如CPU、內存、磁盤、網卡等。
2.操作系統(tǒng)優(yōu)化。主要包含了操作系統(tǒng)的系統(tǒng)參數、內核參數、進程參數、文件系統(tǒng)、磁盤IO等。
3.應用程序優(yōu)化。主要包含對應用軟件,例如:apache、nginx、redis、Mysql、keepalived、kafka等。
下面展開介紹這三大系統(tǒng)優(yōu)化。
—1.硬件優(yōu)化 —
在上線一個業(yè)務系統(tǒng)之前,首先需要進硬件采購。硬件采購的標準是業(yè)務系統(tǒng)的運行特點和對資源的占用情況。
舉例一:如果我們要上線一套redis集群。
redis是內存數據庫,特點是占用內存會非常大。采購的時候要重點考慮的硬件資源就是內存,第一內存要大,第二內存資源要可擴展。
redis對磁盤讀、寫并不會很頻繁,同時,占用的磁盤空間也不會太大。對磁盤的采購,可以不需要太大的磁盤空間,普通的SAS磁盤即可。
舉例二:如果我們要上線的是一套數據庫系統(tǒng)?
數據庫系統(tǒng)的特點是比較耗費CPU,也比較耗費內存,對數據安全性要求很高。
無論你使用的是MySQL、SQLServer還是Oralce,都需要配置足夠快的CPU,足夠大的內存,足夠穩(wěn)定可靠的硬盤,同時硬盤需要做RAID,RAID10最好。
— 2.操作系統(tǒng)優(yōu)化 —
操作系統(tǒng)介于硬件和應用之間,起到一個承上啟下的作用。
相關的系統(tǒng)參數設置關系到內存、IO的調用機制、文件系統(tǒng)的使用效率、進程調度的優(yōu)先級。
我會在專欄《Linux性能調優(yōu)攻略》重點介紹基于Linux操作系統(tǒng)的性能優(yōu)化,具體的優(yōu)化包含如下幾個方面:
操作系統(tǒng)安裝優(yōu)化
進程管理調優(yōu)
內存資源調優(yōu)
IO調度調優(yōu)
文件系統(tǒng)調優(yōu)
網絡傳輸調優(yōu)
下圖展示了Linux的內部結構以及與硬件的協(xié)助機制,非常重要。
最底層,是硬件設備(Hardware);往上是固化到硬件中的程序(Firmware);接著是設備驅動程序(driver),是一種特定形式的軟件程序,實現與硬件設備的交互。
操作系統(tǒng)層面的組成部分,首先是系統(tǒng)內核(kernel),在內核基礎之上是系統(tǒng)庫、共享庫等系統(tǒng)運行必須的庫文件(Libraries)。
最上層是系統(tǒng)中運行的應用程序(Applications),就是我們在系統(tǒng)中安裝的各種應用軟件,例如MySQL、Samba、FTP等。
由此可知,操作系統(tǒng)優(yōu)化是一個從底層硬件到上層軟件應用,逐級優(yōu)化的過程。
— 3.應用程序優(yōu)化 —
最直觀的表現是從日志中發(fā)現異常,然后根據日志中的異樣進行綜合判斷得出優(yōu)化結論。
最容易忽略的是代碼優(yōu)化,有些性能問題完全是代碼不合理。比如,for循環(huán)次數過多、作了很多無謂的條件判斷、相同邏輯重復多次等。
在排除代碼層面的問題后,就需要考慮架構層面、參數配置層面等方面的問題。
架構層面的調優(yōu)包括讀寫分離、多從庫負載均衡、水平和垂直分庫分表,還需要的調優(yōu)手段有連接池調優(yōu)、數據庫參數調優(yōu)等。
最后,通過一個對MySQL數據庫進行調優(yōu),簡單總結一下需要關注的方面有哪些,
MySQL安裝編譯優(yōu)化
MySQL配置文件優(yōu)化
MySQL存儲引擎優(yōu)化
優(yōu)化表類型(MyISAM或InnoDB)
查詢緩存優(yōu)化
SQL語句優(yōu)化
鎖機制優(yōu)化
MySQL服務器優(yōu)化(操作系統(tǒng)參數、存儲盤換SSD等)
看到了吧,性能調優(yōu)真是一個大話題,隨便一個方面,都有很多要優(yōu)化的內容。