目录
Linux curl
命令 -w
参数详解:网络性能分析指南
一、-w
参数基础
在Linux中,curl
命令的-w
(或--write-out
)参数允许你在请求完成后输出格式化的信息,这对于分析网络性能非常有用。通过自定义变量,你可以获取从DNS解析到响应传输的各个阶段的详细指标。
基本语法
curl -w "格式化字符串" -o /dev/null -s "https://example.com"
-w
:指定输出格式-o /dev/null
:丢弃响应内容,仅关注性能指标-s
:静默模式,不显示进度条
二、常用性能分析变量
变量名 | 含义 |
---|---|
%{http_code} | HTTP响应状态码(如200、404)。 |
%{time_total} | 整个请求的总时间(秒),从开始到结束。 |
%{time_namelookup} | DNS解析时间(秒),从开始到DNS解析完成。 |
%{time_connect} | 建立TCP连接的时间(秒),从DNS解析完成到TCP连接建立。 |
%{time_appconnect} | 建立SSL/TLS连接的时间(秒),仅适用于HTTPS请求。 |
%{time_pretransfer} | 从开始到准备传输的时间(秒),包括DNS、TCP和SSL连接。 |
%{time_starttransfer} | 从开始到第一个字节接收的时间(秒),即服务器响应时间。 |
%{size_download} | 下载的总字节数。 |
%{size_header} | 响应头的字节数。 |
%{size_request} | 请求的字节数(包括请求头)。 |
%{speed_download} | 平均下载速度(字节/秒)。 |
%{speed_upload} | 平均上传速度(字节/秒)。 |
%{redirect_count} | 请求过程中发生的重定向次数。 |
%{time_redirect} | 所有重定向(包括DNS、TCP、SSL)的总耗时。 |
%{redirect_url} | 最终重定向的URL(如果有)。 |
%{num_connects} | 创建的连接数(包括重定向)。 |
%{ssl_verify_result} | SSL证书验证结果(0表示验证通过)。 |
%{scheme} | 使用的协议(如HTTP 、HTTPS )。 |
%{remote_ip} | 服务器的IP地址。 |
%{remote_port} | 服务器的端口号。 |
%{local_ip} | 本地客户端的IP地址。 |
%{local_port} | 本地客户端使用的端口号。 |
三、网络延迟分析
1. 典型延迟分析命令
curl -w "\n\
DNS解析时间: %{time_namelookup}s\n\
TCP连接时间: %{time_connect}s\n\
SSL握手时间: %{time_appconnect}s\n\
服务器响应时间: %{time_starttransfer}s\n\
总传输时间: %{time_total}s\n\
HTTP状态码: %{http_code}\n\
下载大小: %{size_download}B\n\
下载速度: %{speed_download}B/s\n" \
-o /dev/null -s "https://example.com"
2. 输出示例
DNS解析时间: 0.002s
TCP连接时间: 0.056s
SSL握手时间: 0.152s
服务器响应时间: 0.231s
总传输时间: 0.245s
HTTP状态码: 200
下载大小: 1256B
下载速度: 5126.5B/s
3. 关键延迟指标分析
指标 | 问题定位 |
---|---|
DNS解析时间 | 若值过高(如>0.1s),可能是DNS服务器配置问题或网络拥塞。 |
TCP连接时间 | 反映网络路径和服务器负载,高值可能表示网络丢包或服务器繁忙。 |
SSL握手时间 | 仅HTTPS有效,高值可能是证书验证或加密算法耗时过长。 |
服务器响应时间 | 直接反映服务器处理能力,高值可能表示应用程序性能问题。 |
总传输时间 | 综合体现网络和服务器性能,用于评估整体用户体验。 |
四、其他网络性能分析场景
1. 传输效率分析
命令示例
curl -w "\
响应头大小: %{size_header}B\n\
响应体大小: %{size_download}B\n\
下载速度: %{speed_download}B/s\n" \
-o /dev/null -s "https://example.com"
应用场景
- 带宽利用率:对比
speed_download
与实际网络带宽 - 响应头优化:检查响应头是否过大(如Cookie、自定义头过多)
- 数据量估算:统计API响应大小,优化传输效率
2. 重定向分析
命令示例
curl -w "\
重定向次数: %{redirect_count}\n\
重定向耗时: %{time_redirect}s\n\
最终URL: %{redirect_url}\n" \
-L -s "http://example.com"
应用场景
- SEO优化:检查网站是否存在过多重定向(如HTTP→HTTPS→www)
- 性能损耗:评估重定向对整体响应时间的影响
3. 连接复用分析
命令示例
curl -w "\
连接数: %{num_connects}\n\
SSL验证结果: %{ssl_verify_result}\n" \
-o /dev/null -s "https://example.com"
应用场景
- HTTP/2优化:检查是否复用已有连接(HTTP/2支持多路复用)
- 证书问题诊断:排查HTTPS连接失败原因
4. 协议与IP分析
命令示例
curl -w "\
协议: %{scheme}\n\
服务器IP: %{remote_ip}\n\
服务器端口: %{remote_port}\n" \
-o /dev/null -s "https://example.com"
应用场景
- 协议版本验证:确认是否使用HTTP/2或HTTP/3
- CDN节点检测:判断请求是否路由到预期的CDN节点
5. 缓存命中率分析
命令示例
curl -I -w "Age头: %{http_code}\n" -s "https://example.com" | grep "Age:"
应用场景
- CDN/缓存效果评估:如果
Age
值较大,表示内容从缓存获取,命中率高
五、进阶技巧
1. 批量测试多个URL
for url in https://example.com https://google.com; do
echo "测试 $url:"
curl -w "总时间: %{time_total}s\n状态码: %{http_code}\n\n" -o /dev/null -s "$url"
done
2. 对比不同协议的性能
# HTTP vs HTTPS
curl -w "HTTP总时间: %{time_total}s\n" -o /dev/null -s "http://example.com"
curl -w "HTTPS总时间: %{time_total}s\n" -o /dev/null -s "https://example.com"
3. 自动化性能测试
for i in {1..10}; do
curl -w "%{time_total}\n" -o /dev/null -s "https://example.com"
done | awk '{sum+=$1} END {print "平均耗时:", sum/NR, "秒"}'
4. 详细协议跟踪
curl --trace-ascii trace.log "https://example.com"
六、综合分析模板
以下是一个包含更多指标的综合分析命令:
curl -w "\n\
===== 连接信息 =====\n\
协议: %{scheme}\n\
服务器IP: %{remote_ip}:%{remote_port}\n\
本地端口: %{local_port}\n\
连接数: %{num_connects}\n\
SSL验证: %{ssl_verify_result}\n\
\n\
===== 传输信息 =====\n\
请求大小: %{size_request}B\n\
响应头: %{size_header}B\n\
响应体: %{size_download}B\n\
下载速度: %{speed_download}B/s\n\
\n\
===== 重定向信息 =====\n\
重定向次数: %{redirect_count}\n\
重定向耗时: %{time_redirect}s\n\
最终URL: %{redirect_url}\n" \
-L -o /dev/null -s "https://example.com"
通过合理使用-w
参数,你可以深入分析网络链路质量、服务器配置、协议效率等问题,为系统优化提供依据。