我的 /etc/hosts
192.168.10.10 api.local
症状:每个地址都要 pending 5 秒左右,而直接使用 Chrome 打开又很快。
网上给的方法是使用 nfs 类型的 folders,经测试无效,使用 curl 查到问题出在域名解析上,最终在这里找到了原因:
.local 结尾的主机名都将被视为Bonjour主机,而不是通过查询“网络”偏好设置中的DNS服务器条目。
解决办法:
不使用 .local 或者为 .local 追加一个 ipv6 的地址。ipv6 条目写在原 ipv4 记录的上边或下边都行。之后即使不使用 nfs 速度仍可以在几十毫秒内打开。
最终的 /etc/hosts
192.168.10.10 api.local ::2AEB:8229 api.local # ::2AEB:8229 是 ipv6 版的 “192.168.10.10” # ::1 -> 127.1
检查请求耗时:
reqTime.fish
function reqTime --description "检查 URL 请求的耗时"
if set -q argv[1]
set format ''\
' time_namelookup: %{time_namelookup} DNS 域名解析,就是把域名转换成 ip 地址的过程\n'\
' time_connect: %{time_connect} TCP 连接建立的时间,就是三次握手的时间\n'\
' time_appconnect: %{time_appconnect} SSL/SSH 等上层协议建立连接的时间,比如 connect/handshake 的时间\n'\
'time_starttransfer: %{time_starttransfer} 从请求开始到第一个字节将要传输的时间\n'\
' time_pretransfer: %{time_pretransfer} 从请求开始到响应开始传输的时间\n'\
' time_redirect: %{time_redirect} 从开始到最后一个请求事务的时间\n'\
' time_total: %{time_total} 此次请求花费的全部时间\n'\
' TCP连接时间 = pretransfter - namelookup\n'\
' 服务器处理时间 = starttransfter - pretransfer\n'\
' 内容传输时间 = total - starttransfer'
curl -o /dev/null -s -w "$format" $argv[1]
else
echo 'Usage: reqTime url'
end
end
# 命令:
curl -o /dev/null -s -w " time_namelookup: %{time_namelookup} DNS 域名解析,就是把域名转换成 ip 地址的过程\n\
time_connect: %{time_connect} TCP 连接建立的时间,就是三次握手的时间\n\
time_appconnect: %{time_appconnect} SSL/SSH 等上层协议建立连接的时间,比如 connect/handshake 的时间\n\
time_starttransfer: %{time_starttransfer} 从请求开始到第一个字节将要传输的时间\n\
time_pretransfer: %{time_pretransfer} 从请求开始到响应开始传输的时间\n\
time_redirect: %{time_redirect} 从开始到最后一个请求事务的时间\n\
time_total: %{time_total} 此次请求花费的全部时间\n\
TCP连接时间 = pretransfter - namelookup\n\
服务器处理时间 = starttransfter - pretransfer\n\
内容传输时间 = total - starttransfer\n" http://api.local
# 输出:
# time_namelookup: 5.130115 DNS 域名解析,就是把域名转换成 ip 地址的过程
# time_connect: 5.131051 TCP 连接建立的时间,就是三次握手的时间
# time_appconnect: 0.000000 SSL/SSH 等上层协议建立连接的时间,比如 connect/handshake 的时间
#time_starttransfer: 5.266109 从请求开始到第一个字节将要传输的时间
# time_pretransfer: 5.131134 从请求开始到响应开始传输的时间
# time_redirect: 0.000000 从开始到最后一个请求事务的时间
# time_total: 5.266235 此次请求花费的全部时间
# TCP连接时间 = pretransfter - namelookup
# 服务器处理时间 = starttransfter - pretransfer
# 内容传输时间 = total - starttransfer
