利用curl 抓取接口延時數據

2020-01-03     鋒哥愛學習

簡介

做接口開發,有時候會遇到投訴接口響應緩慢的場景。一般客戶端投訴會比較多。這個時候我們需要分析一下具體慢在哪個環節。

好在我們可以用curl工具,抓取一段時間內的接口響應延時數據,包括dns解析,建立連結,等待請求響應的時間。

工具原始碼

編寫了一個腳本工具,原始碼如下


#!/bin/bashset -o errexitprint_header () {    echo "code,time_total,time_namelookup,time_connect,time_pretransfer,time_appconnect,time_starttransfer"}make_request () {    curl \\        --write-out "%{http_code},%{time_total},%{time_namelookup},%{time_connect},%{time_pretransfer},%{time_appconnect},%{time_starttransfer}\\n" \\        --silent \\        --output /dev/null \\        "$@"}if [[ -z "$@" ]]; thenecho "提示:URL地址必須提供使用說明: ./curltiming.sh 例如:./curltiming.sh http://www.baidu.com"exit 1fiprint_headerfor i in `seq 1 10000`; domake_request "$@"done


詳細說明


%{http_code},接口狀態碼

%{time_total}, 從開始到請求完畢的時間,響應完畢

%{time_namelookup},從開始到dns解析完成的時間

%{time_connect},從開始到連結完成的時間

%{time_pretransfer}, 從開始到請求開始傳輸的時間

%{time_appconnect}, 從開始到tls,ssl建立連結完畢的時間

%{time_starttransfer},從開始到第一個位元組開始傳輸的時間


保存上面的腳本為一個文件,名為curltiming.sh, 然後設置為可執行,執行命令很簡單,跟你使用curl一樣


例如


chmod a+x ./curltiming.sh./curltiming.sh  -H "Content-Type:application/json" -X POST \\    --data "{}"  http://www.domain.com/v1/api


記得換成你自己的api地址,參數也換一下


執行結果類似於


code,time_total,time_namelookup,time_connect,time_pretransfer,time_appconnect,time_starttransfer200,0.314,0.012,0.034,0.290,0.290,0.314200,0.273,0.004,0.025,0.250,0.250,0.273200,0.269,0.004,0.026,0.245,0.245,0.269200,0.268,0.004,0.027,0.244,0.244,0.268


你可以重定向到一個csv文件,然後用excel導入,進行各種分析,找出最慢的請求,看耗時是在哪裡,是dns解析慢了,還是接口等待響應慢了。

文章來源: https://twgreatdaily.com/zh-cn/K1iBc28BMH2_cNUglPji.html