這幾天在優化服務器的響應時間,在根據 nginx 的 accesslog 中 $request_time 進行程序優化時,發現有個接口,直接返回數據,平均的 $request_time 也比較大。原來 $request_time 包含了用戶數據接收時間,而真正程序的響應時間應該用 $upstream_response_time。php
下面分別介紹一下這兩個時間的差異:nginx
指的就是從接受用戶請求的第一個字節到發送完響應數據的時間,即包括接收請求數據時間、程序響應時間、輸出響應數據時間。後端
是指從 nginx 向後端(php-cgi)創建鏈接開始到接受完數據而後關閉鏈接爲止的時間。緩存
若是把整個過程補充起來的話 應該是:
[1用戶請求][2創建 Nginx 鏈接][3發送響應][4接收響應][5關閉 Nginx 鏈接]服務器
那麼 upstream_response_time 就是: 2+3+4+5
可是,通常這裏面能夠認爲 [5關閉 Nginx 鏈接] 的耗時接近 0
因此 upstream_response_time 實際上就是: 2+3+4 網絡
request_time 是:1+2+3+4
兩者之間相差的就是 [1用戶請求] 的時間測試
出現問題緣由彙總:優化
這些耗時都會累積到 [1用戶請求] 頭上去
這樣就解釋了爲何 request_time 有可能會比 upstream_response_time 要大
由於用戶端的情況一般千差萬別 沒法控制,因此並不該該被歸入到測試和調優的範疇裏面
更值得關注的應該是 upstream_response_time,因此在實際工做中 若是想要關心哪些請求比較慢的話,記得要在配置文件的 log_format 中加入 $upstream_response_time spa