在Linux中用curl评估API响应性能有五种方法:一、用-w参数输出各阶段耗时;二、结合time命令测端到端总时间;三、循环请求取平均值;四、启用HTTP/2并监控协议协商;五、设置超时与错误捕获。

如果您需要在Linux系统中通过命令行工具评估API接口的响应性能,则curl是常用的轻量级网络调试工具。以下是多种测量API响应时间的具体方法:
一、使用curl内置时间统计功能
curl自带-time_format和-write-out参数,可精确输出DNS解析、连接、传输等各阶段耗时,便于定位延迟来源。
1、执行命令:curl -w "DNS解析:%{time_namelookup}\n连接:%{time_connect}\n预传输:%{time_pretransfer}\n开始传输:%{time_starttransfer}\n总耗时:%{time_total}\n" -o /dev/null -s https://api.example.com/health
2、将输出重定向到文件以便后续分析:curl -w "@curl-format.txt" -o /dev/null -s https://api.example.com/health
3、创建curl-format.txt文件,内容为:DNS解析:%{time_namelookup}\n连接:%{time_connect}\n预传输:%{time_pretransfer}\n开始传输:%{time_starttransfer}\n总耗时:%{time_total}\n
二、结合time命令进行整体耗时测量
time命令可捕获整个curl进程从启动到退出的墙钟时间,适用于快速获取端到端响应总时长。
1、运行带详细输出的time命令:/usr/bin/time -v curl -s -o /dev/null https://api.example.com/health
2、仅显示用户态与内核态执行时间:time curl -s -o /dev/null https://api.example.com/health
3、将time结果以秒为单位输出(适用于脚本调用):TIMEFORMAT='%R'; time curl -s -o /dev/null https://api.example.com/health
三、使用curl重复请求并计算平均响应时间
通过循环发起多次请求,采集多组数据后取平均值,可降低单次测量受网络抖动影响的程度。
1、执行10次请求并记录每次总耗时:for i in {1..10}; do curl -w "%{time_total}\n" -o /dev/null -s https://api.example.com/health; done > times.log
2、计算平均值:awk '{sum += $1} END {print "平均响应时间:", sum/NR, "秒"}' times.log
3、提取最小值与最大值:awk '{print $1}' times.log | sort -n | awk 'NR==1{min=$1} END{max=$1; print "最小:" min, "最大:" max}'
四、启用HTTP/2并监控协议协商耗时
当目标服务支持HTTP/2时,启用该协议可减少头部开销,同时通过verbose输出观察ALPN协商是否成功及耗时。
1、强制使用HTTP/2并显示详细过程:curl -v --http2 -o /dev/null -s https://api.example.com/health 2>&1 | grep -E "(ALPN|time_|connected)"
2、仅输出HTTP版本与总耗时:curl -w "HTTP版本:%{http_version}\n总耗时:%{time_total}\n" --http2 -o /dev/null -s https://api.example.com/health
3、验证是否实际使用HTTP/2:若输出中出现"Using HTTP/2"且http_version为2.0,则确认协议协商成功
五、添加超时限制与错误响应捕获
设置合理超时阈值并区分不同错误类型,有助于识别接口不可达、响应缓慢或服务端异常等情况。
1、设置连接超时3秒、总超时10秒:curl -m 10 -o /dev/null -s -w "状态码:%{http_code}, 总耗时:%{time_total}\n" https://api.example.com/health
2、仅捕获非2xx响应并打印错误信息:curl -f -s -o /dev/null -w "HTTP状态:%{http_code}, 耗时:%{time_total}" https://api.example.com/health || echo "请求失败"
3、若返回状态码为000,表示curl未能建立TCP连接,应检查网络连通性或目标地址可达性









