我可以使用哪些命令来调试或分析缓慢的 DNS/互联网连接?

我可以使用哪些命令来调试或分析缓慢的 DNS/互联网连接?

我所在的企业通常有非常快的互联网连接,但每次访问网页都需要很长时间。我尝试在浏览器中对此进行分析,它唯一告诉我的是瓶颈在Waiting (TTFB).这可能与我用来dnsmasq将我从域路由到适当的 IP 地址的事实有关hostname.dev,但我不知道在哪里进行分析或对连接过程的这一部分进行故障排除。我该怎么做呢?

顺便说一下,我使用的是 Ubuntu 15.04。

答案1

页面加载时间缓慢的常见瓶颈通常是 DNS 解析。要测试解析 DNS 所需的时间,请尝试使用dig(1).

$ dig example.com

这应该给你一个如下所示的输出

; <<>> DiG 9.10.2-P1 <<>> example.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 13362
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;example.com.                   IN      A

;; ANSWER SECTION:
example.com.            1       IN      A       93.184.216.34

;; Query time: 3 msec
;; SERVER: 10.0.0.1#53(10.0.0.1)
;; WHEN: Thu Jun 18 23:19:24 IST 2015
;; MSG SIZE  rcvd: 45

看到最后一节了吗?它显示解析 DNS 花费了多少时间。对于 dnsmasq,我假设您的时间为几毫秒或更短。

如果您看起来不错,那么就该测试实际网络了。首先检查连接到域是否花费了太多时间。您应该尝试 ping 域并查看 RTT 时间。如果 rtt 太大,那么连接延迟可能是罪魁祸首。

$ ping -c 5 example.com

PING example.com (93.184.216.34) 56(84) bytes of data.
64 bytes from 93.184.216.34: icmp_seq=1 ttl=51 time=204 ms
64 bytes from 93.184.216.34: icmp_seq=2 ttl=51 time=205 ms
64 bytes from 93.184.216.34: icmp_seq=3 ttl=51 time=206 ms
64 bytes from 93.184.216.34: icmp_seq=4 ttl=51 time=205 ms
64 bytes from 93.184.216.34: icmp_seq=5 ttl=51 time=205 ms

--- example.com ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4001ms
rtt min/avg/max/mdev = 204.315/205.415/206.755/0.785 ms

如果这是一秒或更长时间,则肯定存在连接瓶颈。

如果您发现 的输出有问题ping(1),您可以尝试使用 更好地分析连接traceroute(1)

Traceroute 的输出应该可以帮助您分析连接并查看从您的计算机到服务器的路径的哪一部分导致最大延迟。

如果 ping 输出看起来不错,请检查服务器是否花费了太多时间来发回响应。尝试wget(1)

$ wget -d example.com

DEBUG output created by Wget 1.16.3.60-fd3a-dirty on linux-gnu.

URI encoding = ‘UTF-8’
--2015-06-18 23:27:55--  http://example.com/
Resolving example.com (example.com)... 93.184.216.34, 2606:2800:220:1:248:1893:25c8:1946
Caching example.com => 93.184.216.34 2606:2800:220:1:248:1893:25c8:1946
Connecting to example.com (example.com)|93.184.216.34|:80... connected.
Created socket 4.
Releasing 0x0000000001afc8d0 (new refcount 1).

---request begin---
GET / HTTP/1.1
User-Agent: Wget/1.16.3.60-fd3a-dirty (linux-gnu)
Accept: */*
Accept-Encoding: identity
Host: example.com
Connection: Keep-Alive

---request end---
HTTP request sent, awaiting response... 
---response begin---
HTTP/1.1 200 OK
Accept-Ranges: bytes
Cache-Control: max-age=604800
Content-Type: text/html
Date: Thu, 18 Jun 2015 17:57:56 GMT
Etag: "359670651"
Expires: Thu, 25 Jun 2015 17:57:56 GMT
Last-Modified: Fri, 09 Aug 2013 23:54:35 GMT
Server: ECS (ewr/15BD)
X-Cache: HIT
x-ec-custom-error: 1
Content-Length: 1270

---response end---
200 OK
Registered socket 4 for persistent reuse.
Length: 1270 (1.2K) [text/html]
Saving to: ‘index.html’

index.html                            100%[==========================================================================>]   1.24K  --.-KB/s   in 0s

2015-06-18 23:27:56 (197 MB/s) - ‘index.html’ saved [1270/1270]

输出是否在某个位置长时间暂停?那么这一步肯定是造成延迟的原因。

相关内容