我的 /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