上一節,我帶你一塊兒梳理了,性能問題分析的通常步驟。先帶你簡單回顧一下。算法
咱們能夠從系統資源瓶頸和應用程序瓶頸,這兩個角度來分析性能問題的根源。數據庫
從系統資源瓶頸的角度來講,USE 法是最爲有效的方法,即從使用率、飽和度以及錯誤數這三個方面,來分析 CPU、內存、磁盤和文件系統 I/O、網絡以及內核資源限制等各種軟硬件資源。至
於這些資源的分析方法,我也帶你一塊兒回顧了,我們專欄前面幾大模塊的分析套路。緩存
從應用程序瓶頸的角度來講,能夠把性能問題的來源,分爲資源瓶頸、依賴服務瓶頸以及應用自身的瓶頸這三類。性能優化
固然,雖然系統和應用是兩個不一樣的角度,但在實際運行時,它們每每相輔相成、相互影響。服務器
咱們作性能分析,就是要結合應用程序和操做系統的原理,揪出引起問題的「真兇「。網絡
找到性能問題的來源後,整個優化工做其實也就完成了一大半,由於這些瓶頸爲咱們指明瞭優化的方向。不過,對於性能優化來講,又有哪些常見的方法呢?數據結構
今天,我就帶你一塊兒來看看,性能優化的通常方法。同上一節的性能分析同樣,咱們也能夠從系統和應用程序,這兩個不一樣的角度來進行性能優化。多線程
首先來看系統的優化。在上一節,我曾經介紹過,USE 法能夠用來分析系統軟硬件資源的瓶頸,那麼,相對應的優化方法,固然也是從這些資源瓶頸入手。架構
實際上,我們專欄的前四個模塊,除了最核心的系統資源瓶頸分析以外,也已經包含了這些常見資源瓶頸的優化方法。併發
接下來,我就從 CPU 性能、內存性能、磁盤和文件系統 I/O 性能以及網絡性能等四個方面,帶你回顧一下它們的優化方法。
首先來看 CPU 性能的優化方法。在CPU 性能優化的幾個思路中,我曾經介紹過, CPU 性能優化的核心,在於排除全部沒必要要的工做、充分利用 CPU 緩存並減小進程調度對性能的影響。
從這幾個方面出發,我相信你已經想到了不少的優化方法。這裏,我主要強調一下,最典型的三種優化方法。
說完了 CPU 的性能優化,咱們再來看看,怎麼優化內存的性能。在如何「快準狠」找到系統內存的問題中,我曾經爲你梳理了常見的一些內存問題,好比可用內存不足、內存泄漏、Swap 過
多、缺頁異常過多以及緩存過多等等。因此,說白了,內存性能的優化,也就是要解決這些內存使用的問題。
在我看來,你能夠經過如下幾種方法,來優化內存的性能。
接下來,咱們再來看第三類系統資源,即磁盤和文件系統 I/O 的優化方法。在磁盤 I/O 性能優化的幾個思路 中,我已經爲你梳理了一些常見的優化思路,這其中有三種最典型的方法。
除此以外,使用不一樣磁盤隔離不一樣應用的數據、優化文件系統的配置選項、優化磁盤預讀、增大磁盤隊列長度等,也都是經常使用的優化思路。
最後一個是網絡的性能優化。在網絡性能優化的幾個思路中,我也已經爲你梳理了一些常見的優化思路。這些優化方法都是從 Linux 的網絡協議棧出發,針對每一個協議層的工做原理進行優化。
這裏,我一樣強調一下,最典型的幾種網絡優化方法。
這些都是內核選項優化的最多見措施。
說完了系統軟硬件資源的優化,接下來,咱們再來看看應用程序的優化思路。
雖然系統的軟硬件資源,是保證應用程序正常運行的基礎,但你要知道, 性能優化的最佳位置,仍是應用程序內部。爲何這麼說呢?我簡單舉兩個例子你就明白了。
第一個例子,是系統 CPU 使用率(sys%)太高的問題。有時候出現問題,雖然表面現象是系統CPU 使用率太高,但待你分析事後,極可能會發現,應用程序的不合理系統調用纔是罪魁禍首。
這種狀況下,優化應用程序內部系統調用的邏輯,顯然要比優化內核要簡單也有用得多。
再好比說,數據庫的 CPU 使用率高、I/O 響應慢,也是最多見的一種性能問題。這種問題,通常來講,並非由於數據庫自己性能很差,而是應用程序不合理的表結構或者 SQL 查詢語句致使
的。這時候,優化應用程序中數據庫表結構的邏輯或者 SQL 語句,顯然要比優化數據庫自己,能帶來更大的收益。
因此,在觀察性能指標時,你應該先查看 應用程序的響應時間、吞吐量以及錯誤率等指標,由於它們纔是性能優化要解決的終極問題。以終爲始,從這些角度出發,你必定能想到不少優化方
法,而我比較推薦下面幾種方法。
除此以外,你還可使用消息隊列、CDN、負載均衡等各類方法,來優化應用程序的架構,將原來單機要承擔的任務,調度到多臺服務器中並行處理。這樣也每每能得到更好的總體性能。
今天,我帶你一塊兒,從系統和應用程序這兩個角度,梳理了常見的性能優化方法。
從系統的角度來講,CPU、內存、磁盤和文件系統 I/O、網絡以及內核數據結構等各種軟硬件資源,爲應用程序提供了運行的環境,也是咱們性能優化的重點對象。你能夠參考我們專欄前面四
個模塊的優化篇,優化這些資源。
從應用程序的角度來講,下降 CPU 使用,減小數據訪問和網絡 I/O,使用緩存、異步處理以及多進程多線程等,都是經常使用的性能優化方法。除了這些單機優化方法,調整應用程序的架構,或是
利用水平擴展,將任務調度到多臺服務器中並行處理,也是經常使用的優化思路。
雖然性能優化的方法不少,不過,我仍是那句話,必定要避免過早優化。性能優化每每會提升複雜性,這一方面下降了可維護性,另外一方面也爲適應複雜多變的新需求帶來障礙。
因此,性能優化最好是逐步完善,動態進行;不追求一步到位,而要首先保證,能知足當前的性能要求。發現性能不知足要求或者出現性能瓶頸後,再根據性能分析的結果,選擇最重要的性能問題進行優化。