網站效能優化的三重境界

發表於2019-05-11
這篇文章是關於網站效能優化體驗的,效能優化是一個複雜的話題,牽涉的東西非常多,我只是按照我的理解列出了效能優化整個過程中需要考慮的種種因素。點到為止,包含的內容以淺顯的介紹為主,如果你有見解能告知我那再好不過了。無論如何,希望閱讀它的你有所收穫。
我眼中的網站效能問題都反映了一個網站的“Availability”(中文叫做可用性,但是這個翻譯也不足夠達意),以往我的認識是,這個網站如果全部或者部分不可用,那是功能問題,但是如果響應慢、負載差,這才是效能問題;可是後來我逐漸意識到,效能問題涵蓋的範圍更廣,我還沒法給出一個準確定義,但是許多非業務邏輯錯誤引起的網站問題都可能可以算做效能問題,比如可擴充套件性差,比如單點故障問題。
在網站效能優化的最初階段,也就是所謂的“第一重境界”,做區域性的定位、分析和修正,考慮的僅僅是“優化”,這也是初涉效能優化問題的大多數人的認識。在問題發生以後,發現它和業務邏輯沒有太大關係,就開始嘗試尋找問題產生的原因並加以解決。
無論是網站無響應還是響應緩慢,還是響應曲線異常波動,比如,可以圍繞CPU的使用問自己這樣幾個問題:


1,從CPU使用看系統是否繁忙? 
2,如果系統繁忙,系統在做什麼,為什麼?(典型問題:HashMap不安全併發導致的死迴圈)
3,如果系統空閒,那麼瓶頸在哪裡?(典型問題:IO無響應)
4,如果響應波動,是否存在週期,週期是什麼?(典型問題:連線迅速佔滿,每一週期批量超時斷開一批) 

5,如果響應波動,效能到波谷時系統在做什麼?
6,是否有背景CPU使用?(即無壓力下觀察CPU的使用情況。典型問題:正執行的定時任務佔用過多系統資源)

在這些問題中,情況雖然千變萬化,簡單地說,CPU的使用是核心,CPU使用率高,說明系統資源被充分利用,可能系統在實實在在地做事,反之,需要尋找其他瓶頸。通過結合程式、執行緒的快照,來初步確定問題的範圍。CPU使用率低的情況居多而且容易定位,只需要尋找其他的系統瓶頸;CPU佔用率偏高的問題往往比較不容易定位,雖然也有一些辦法。關於具體效能問題的定位技術,這裡不著過多筆墨,後續有機會詳細介紹。

1,對於一個剛開始做效能優化的網站系統,下面的事情不妨都做一做,會有立竿見影的效果;

2,對於使用的成熟的技術,技術社群、官方文件,往往會給出這種技術的白皮書或者優化指導,請參考。比如 Struts2的官方效能調優指南、Java6效能優化白皮書。
3,平臺和虛擬機器調優。對於使用平臺和虛擬機器的專案來說,這是必須要做的,一個JVM的引數可以對系統有顯著的影響。比如Linux下連線管理的引數,JVM關於堆大小分佈的引數等等。

前端審查。這裡的審查指的是通過Page speed、YSlow等工具,以及一些業界通用的法則和經驗(比如yahoo的若干條前端效能優化法則)來評估現有頁面的問題。如果你需要系統的指導,請點此處檢視餘下全文
回覆

相關文章