curl是一個(gè)非常好用的命令行工具惊科,經(jīng)常被用來測試網(wǎng)站能否正常訪問、網(wǎng)站URL響應(yīng)什么狀態(tài)碼晾嘶,上傳和下載文件铜跑,以及調(diào)試API接口等。在我的工作中,也是經(jīng)常用到curl。
但curl的功能遠(yuǎn)不止如此,curl還能記錄http請(qǐng)求的耗時(shí)時(shí)間源织,根據(jù)這些信息我們可以分析性能瓶頸,這也是本次關(guān)注的重點(diǎn)赎懦。
首先配置curl的輸出格式雀鹃,打開~/.curlrc,輸入以下內(nèi)容励两。
-w "dnslookup: %{time_namelookup} | connect: %{time_connect} | appconnect: %{time_appconnect} | pretransfer: %{time_pretransfer} | starttransfer: %{time_starttransfer} | total: %{time_total}\n"
curl輸出格式詳解黎茎。
time_namelookup:dns解析總共消耗的時(shí)間
time_connect:從開始dns解析到tcp建聯(lián)成功之間總共消耗的時(shí)間
time_appconnect:從開始dns解析到ssl握手成功之間總共消耗的時(shí)間,以收到Finished包為準(zhǔn)当悔。
time_pretransfer:從開始dns解析到發(fā)起http請(qǐng)求之間總共消耗的時(shí)間
time_starttransfer:從開始dns請(qǐng)求到服務(wù)器響應(yīng)首個(gè)字節(jié)之間總共消耗的時(shí)間
time_total:整個(gè)請(qǐng)求所消耗的時(shí)間傅瞻,包含dns解析踢代、tcp握手和ssl握手的時(shí)間
curl發(fā)起https請(qǐng)求,輸出的內(nèi)容是各階段所消耗的時(shí)間嗅骄,單位為秒胳挎。
root@k8s-master1:~# cat ~/.curlrc
-w "dnslookup: %{time_namelookup} | connect: %{time_connect} | appconnect: %{time_appconnect} | pretransfer: %{time_pretransfer} | starttransfer: %{time_starttransfer} | total: %{time_total}\n"
root@k8s-master1:~#
root@k8s-master1:~# curl -so /dev/null https://www.example.com
dnslookup: 1.510 | connect: 1.757 | appconnect: 2.256 | pretransfer: 2.259 | starttransfer: 2.506 | total: 3.001
root@k8s-master1:~#
看得出來時(shí)間是遞增的,例如time_connect包含了time_namelookup溺森,time_appconnect包含了time_connect慕爬。
time_namelookup是dns解析總共消耗的時(shí)間,跟服務(wù)器性能沒啥關(guān)系屏积。主要關(guān)注的是除了dns解析以外的耗時(shí)医窿,根據(jù)上面的信息,各階段的耗時(shí)都已經(jīng)整理好了炊林。
dns解析耗時(shí):1.510s
tcp建聯(lián)耗時(shí):1.757s - 1.510s = 0.247s
ssl握手耗時(shí):2.256s - 1.757s = 0.499s
http首包耗時(shí):2.506s - 2.259s = 0.247s
http傳輸耗時(shí):3.001s - 2.506s = 0.495s
http總共耗時(shí):3.001s - 2.259s = 0.742s
總共3秒的請(qǐng)求姥卢,dns解析占用了50%,其他的耗時(shí)貌似也不太理想渣聚。
http首包耗時(shí)是客戶端開始發(fā)起http請(qǐng)求(time_pretransfer)到服務(wù)器響應(yīng)首個(gè)字節(jié)(time_starttransfer)之間總共消耗的時(shí)間独榴,不包含tcp建立和ssl握手時(shí)間。
另外這是以客戶端角度來統(tǒng)計(jì)的耗時(shí)奕枝,以服務(wù)器的角度統(tǒng)計(jì)的耗時(shí)可能稍微有些差距棺榔。