LAMP 系統性能調優之度量性能
圖-LAMP
LAMP的度量性能
持續地對性能進行度量在兩個方面有幫助。首先,度量可以幫助了解性能趨勢,包括好壞兩方面的趨勢。作為一個簡單的方法,查看一下 Web 服務器上的中央處理單元(CPU)使用率,就可以了解 CPU 是否負載過重。同樣,查看過去使用的總帶寬并推斷未來的變化,可以幫助判斷什么時候需要進行網絡升級。這些度量***與其他度量和觀測結合考慮。例如,當用戶抱怨應用程序太慢時,可以檢查磁盤操作是否達到了***容量。
性能度量的第二個用途是,判斷調優是對系統性能有幫助,還是使它更糟糕了。方法是比較修改之前和之后的度量結果。但是,為了進行有效的比較,每次應該只修改一個設置,然后對適當的指標進行比較以判斷修改的效果。每次只修改一個設置的原因應該是很明顯的:同時做出的兩個修改很可能會相互影響。選擇用來進行比較的指標比較微妙。
選擇的指標必須能夠反映應用程序用戶感覺到的響應。如果一項修改的目標是減少數據庫的內存占用量,那么取消各種緩沖區肯定會有幫助,但是這會犧牲查詢速度和應用程序性能。所以,應該選擇應用程序響應時間這樣的指標,這會使調優向著正確的方向發展,而不僅僅是針對數據庫內存使用量。
可以以許多方式度量應用程序響應時間。最簡單的方法可能是使用 curl 命令,見清單 1。
清單 1. 使用 cURL 度量 Web 站點的響應時間
$ curl -o /dev/null -s -w %{time_connect}:%{time_starttransfer}:%{time_total}\
http://www.canada.com
0.081:0.272:0.779
清單 1 給出對一個流行的新聞站點執行 curl 命令的情況。輸出通常是 HTML 代碼,通過 -o 參數發送到 /dev/null。-s 參數去掉所有狀態信息。-w 參數讓 curl 寫出表 1 列出的計時器的狀態信息:
表 1. curl 使用的計時器
計時器描述
time_connect建立到服務器的 TCP 連接所用的時間
time_starttransfer在發出請求之后,Web 服務器返回數據的***個字節所用的時間
time_total完成請求所用的時間
這些計時器都相對于事務的起始時間,甚至要先于 Domain Name Service(DNS)查詢。因此,在發出請求之后,Web 服務器處理請求并開始發回數據所用的時間是 0.272 - 0.081 = 0.191 秒。客戶機從服務器下載數據所用的時間是 0.779 - 0.272 = 0.507 秒。
通過觀察 curl 數據及其隨時間變化的趨勢,可以很好地了解站點對用戶的響應性。
當然,Web 站點不僅僅由頁面組成。它還有圖像、JavaScript 代碼、CSS 和 cookie 要處理。curl 很適合了解單一元素的響應時間,但是有時候需要了解整個頁面的裝載速度。
用于 Firefox 瀏覽器的 Tamper Data 擴展(參見 參考資料 一節中的鏈接)可以在日志中記錄 Web 瀏覽器發出的每個請求,并顯示每個請求所用的下載時間。使用這個擴展的方法是,選擇 Tools > Tamper Data 來打開 Ongoing requests 窗口。裝載要考察的頁面,然后就會看到瀏覽器發出的每個請求的狀態和裝載每個元素所用的時間。圖 1 給出裝載 developerWorks 主頁的結果。
圖 1. 用于裝載 developerWorks 主頁的請求細目

每一行描述一個元素的裝載情況。顯示的數據包括發出請求的時間、裝載所用的時間、大小和結果。Duration 欄列出裝載元素本身所用的時間,Total Duration 欄列出所有子元素所用的時間。在圖 1 中,裝載主要頁面所用的時間是 516 毫秒(ms),但是裝載所有東西并顯示整個頁面所用的時間是 5101 ms。
#p#
Tamper Data 擴展有一種有用的模式,將頁面裝載數據的輸出繪制成圖形。右擊 Ongoing requests 窗口上半部分的任何地方,并選擇 Graph all。圖 2 顯示圖 1 中數據的圖形化視圖。
圖 2. 用于裝載 developerWorks 主頁的請求的圖形化視圖

在圖 2 中,每個請求的持續時間顯示為深藍色,并相對于頁面裝載的啟始時間顯示。所以,可以看出哪些請求使整個頁面的裝載變慢了。
通過文章的描述和圖片的有力說明,我們清楚的知道了LAMP 系統性能調優的第二步:度量性能
【編輯推薦】