简介
做接口开发,有时候会遇到投诉接口响应缓慢的场景。一般客户端投诉会比较多。这个时候我们需要分析一下具体慢在哪个环节。
好在我们可以用curl工具,抓取一段时间内的接口响应延时数据,包括dns解析,建立链接,等待请求响应的时间。
![利用curl 抓取接口延时数据](http://p2.ttnews.xyz/loading.gif)
工具源代码
编写了一个脚本工具,源代码如下
<code>#!/bin/bash
set -o errexit
print_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 "$@" ]]; then
echo "提示:
URL地址必须提供
使用说明: ./curltiming.sh/<code>
例如:./curltiming.sh http://www.baidu.com
"
exit 1
fi
print_header
for i in `seq 1 10000`; do
make_request "$@"
done
详细说明
%{http_code},接口状态码
%{time_total}, 从开始到请求完毕的时间,响应完毕
%{time_namelookup},从开始到dns解析完成的时间
%{time_connect},从开始到链接完成的时间
%{time_pretransfer}, 从开始到请求开始传输的时间
%{time_appconnect}, 从开始到tls,ssl建立链接完毕的时间
%{time_starttransfer},从开始到第一个字节开始传输的时间
保存上面的脚本为一个文件,名为curltiming.sh, 然后设置为可执行,执行命令很简单,跟你使用curl一样
例如
<code>chmod a+x ./curltiming.sh
./curltiming.sh -H "Content-Type:application/json" -X POST \\
--data "{}" http://www.domain.com/v1/api/<code>
记得换成你自己的api地址,参数也换一下
执行结果类似于
<code>code,time_total,time_namelookup,time_connect,time_pretransfer,time_appconnect,time_starttransfer
200,0.314,0.012,0.034,0.290,0.290,0.314
200,0.273,0.004,0.025,0.250,0.250,0.273
200,0.269,0.004,0.026,0.245,0.245,0.269
200,0.268,0.004,0.027,0.244,0.244,0.268
/<code>
你可以重定向到一个csv文件,然后用excel导入,进行各种分析,找出最慢的请求,看耗时是在哪里,是dns解析慢了,还是接口等待响应慢了。
閱讀更多 鋒哥愛學習 的文章