咱們平時中,總會遇到各類各類的性能問題,有應用層面的,網絡層面的,操做系統層面的等等。在我看來,咱們須要性能調優的緣由有如下幾個: (1) 這些問題若是不解決,會直接影響到咱們的系統性能,甚至形成咱們服務的不可用 (2) 加大咱們的服務器成本 (3) 迅速定位問題緣由,迅速解決,下降故障影響 (4) 對本身和他人負責服務器
(1) 若是咱們站在應用層來看,咱們更加關注工做負載,工做負載中咱們一般會關注:延時和吞吐量。網絡
(2) 若是咱們站在系統層面來看,須要關注的問題就不少,CPU,IO,內存,網絡,磁盤等。這個時候,咱們一般會關注:吞吐量,使用率,飽和度,延遲等工具
因爲應用層面的代碼致使的緣由不夠通用化,可是應用層面致使的問題,最終仍是會體現到系統層面上,咱們能夠利用系統層面的問題反推回去,因此咱們會聚焦在系統層面來看問題。性能
其實這裏有個很難定義的點,就是怎麼樣性能算是好,怎麼樣算是很差,幾乎每一個指標都會遇到這樣的問題。在這裏,我想說,這是個主觀的點,咱們一般都是本身去定義這個所謂的閾值。優化
遇到一個性能問題,咱們須要一些排查的方法論,在這裏不會提出不少方法論,用的是本身常常用的的方法,每一個步驟都有相應的工具來解決。操作系統
(1) 出現了什麼性能問題 (2) 誰致使了這個問題 (3) 問題是否存在規律性 (4) 爲何會致使這個問題(這裏可能須要不斷地假設和論證)cdn
一般咱們優先優化最有價值的性能,可是不一樣指標之間不是簡單的單一關係,不少是錯綜複雜聯繫在一塊兒的,咱們在優化先後須要都去評價各個方面的指標。blog
後續會介紹的每一個工具,背後都是相關的各類基礎知識。不但願你們只是停留在會用的階段,須要的是深刻理解背後的基礎知識,這樣才能更好的利用這些兵器。內存
(1) 最重要的是,操做系統底層知識。例如:CPU,磁盤,網絡,IO等知識 (2) Linux經常使用的操做命令it
能熟練使用下圖的工具,解決相應的問題