我有一台运行 WHM 11.36.0 (build 14) 和 CENTOS 6.4 x86_64 xenpv – control 的 VPS 服务器
我的服务器上有多个帐户,每当我向其中一个帐户发出请求时,请求都需要几秒钟才能建立。当传输连接时,速度很快,但最初 20 秒的“什么都没有发生”让我担心。
我的组织大量使用 VPS,我实在承受不起速度变慢的后果。
有人知道为什么会发生这种情况吗?
我对服务器的技术经验不是很丰富(我是软件人员),所以我不确定如何正确配置服务器,对我来说,这看起来像是 DNS 错误,但我不知道如何调试或修复这些问题!有人可以帮忙吗?
以下是目前遇到此“挂起”情况的两个网站 -
更新:
我已经与我的 VPS 主机进行了沟通,官方的说法是挂起是由我的本地 DNS 而不是服务器的 DNS 引起的 - 但显然,此问题仅在尝试访问我们自己的服务器上的帐户时发生,而不会在网络上的任何其他地方发生。
为了测试这一点,我将本地 DNS 更改为 8.8.8.8 和 8.8.4.4,然后在路由器上重复此更改。行为似乎没有任何变化。
我迫切希望解决这个问题,但到目前为止,还没有结果!
答案1
为了检查是 DNS 还是 TCP 连接问题,我会tcpdump
在服务器上和Wireshark
客户端上安装并自行运行一些测量。虽然这需要一些控制台技能,但值得一试。
我们将从您的网络接口捕获原始流量,并深入研究线路内部,以确定是 DNS 问题还是 TCP 问题。但是,这并不能解决您的问题的根本原因,只能为您提供进一步研究的提示。
整个帖子都基于这样的假设:这要么是 DNS 反向查找超时问题,要么是网络上更深层次的问题。
安装后tcpdump
,确定 HTTP 请求通过哪个物理网络接口到达您的服务器。接下来,确定您正在使用的机器的公共 IP 地址 - 如果您运行连接测试,您需要此地址来过滤掉不需要的噪音。
我们将其称为您的服务器的 IP 地址A
和您的客户端的 IP 地址B
。
假设保存此虚拟主机 IP 地址的接口名为eth0
,您应该tcpdump
以用户身份运行root
如下:
# tcpdump -n -s 1500 -w /tmp/tcpdump.pcap -i eth0 \(host A and host B and tcp port 80\) or udp port 53
(将A
和替换B
为您的 IP 地址;如果您使用 ,https
请将http
替换tcp port 80
为tcp port 443
)
该程序将启动并捕获您的客户端计算机和服务器之间的所有流量以及 DNS 数据包(恐怕几乎所有数据包都是如此,但我们稍后会再讨论这个问题)并将内容存储到文件中/tmp/tcpdump.pcap
。
然后,启动您的请求。观察到问题后,返回控制台并按tcpdump
停止CTRL+C
。
现在我建议你安装该程序Wireshark在您的客户端机器上进行更深入的分析。
安装后,将文件从服务器下载到客户端机器,然后通过 在 Wireshark 中加载该文件File -> Open
。
要检查 TCP 握手是否正常,请查看前三个数据包。如果捕获网络流量正常,请查看第一个设置了 TCPSYN
标志的数据包。使用鼠标标记该数据包并选择Analyze -> Follow TCP Stream
过滤掉这个 TCP 连接(我们这样做是因为通常单个请求到 Web 服务器时会有很多 TCP 连接,但我们现在只想查看一个)。
窗口会打开,只需再次关闭它,我们不需要它。现在突出显示第一个数据包并选择。这将使整个窗口中的所有时间戳都与您标记的第一个数据包相关,以便我们可以查看时间是否正常。如果不是默认值,Edit -> Set time reference (Toggle)
也请设置。View -> Time Display Format -> Seconds since previous displayed packet
查看前四个数据包。您会注意到,它们将设置某些 TCP 标志:
- 从客户端到服务器的第一个数据包已
SYN
设置标志。 - 从您的服务器到客户端的第二个数据包已设置
SYN
和ACK
标志。 - 从客户端到服务器的第三个数据包只设置了
ACK
标志。 - 第四个数据包现在将包含您的第一个
HTTP GET
请求。 - 第五个数据包是服务器
ACK
确认已HTTP GET
收到 - 第六个数据包是第一个到达的数据
- 这甚至是更多的数据;如果您查看 Wireshark 的下部,您就会看到内容。
看看这七个数据包的时间戳。它们都应该非常接近;看起来应该是这样的:
您可以看到所有这些数据包都非常紧密地相互跟随,它们之间只相隔数百毫秒。如果您遇到这种情况,则 TCP 连接本身可以正常工作,我们需要进一步研究 DNS。但如果这是不是好吧,如果您看到长时间延迟,甚至 TCP 重新传输或有关“重复 ACK”等的消息,那么您需要查看更深层次的网络问题。然后返回您的 VPS 提供商。
但是,如果结果没有问题,我们会检查 DNS。为此,我们要检查以下事实:
- DNS 服务器是否及时响应问题?
- 导致问题的 DNS 问题到底是什么?
我将遵循以下假设:
- 服务器看到你的客户端的 IP 地址,并想知道它的 DNS 名称
IN PTR
为此,它将向名称服务器发送所谓的问题- 我可以想象,这种所谓的“反向查找”要么失败,要么名称服务器响应缓慢。
现在,你必须做一些数字变换。假设你的客户端的 IP 地址是1.2.3.4
。现在撤销数字 ( 4.3.2.1
) 并添加后缀.in-addr.arpa
。现在您已经为 Wireshark 构建了正确的查询。在Filter
-field 中输入:
dns.qry.name == “4.3.2.1.in-addr.arpa”
在下面的例子中,我要求提供我的服务器的完整限定名称78.47.204.196
,因此我的过滤器是dns.qry.name == "196.204.47.78.in-addr.arpa"
:
在我的例子中,你会看到一个有趣的效果。我的域名服务器192.168.1.1
响应速度不够快,不符合客户的口味,所以它发出了另一个请求,尽管这次使用的是 IPv6。然而,这并不重要,如果你没有 IPv6,它只会再次发出相同的请求。你会看到真正的答案 - yalla.hackers-r-us.org
- 在请求后 2.96 秒出现。虽然很慢,但答案就在那里。
您知道需要检查以下事项:
- 请求的答复是否到达?
- 同一个问题多久会被重复问一次?
如果您看到该请求在 30 秒内反复发送,则您就知道这是 DNS 问题。
抱歉发了这么长的帖子,但从你写的内容来看,我认为你对这些事情并不太深入。
答案2
您认为这可能是 DNS 问题,这种直觉可能是正确的。首次连接时,VPS 会尝试反向解析日志的传入 IP 地址,如果配置的 DNS 服务器没有响应,它就会在那里等待一段时间。
您可以尝试将 VPS 的 DNS 服务器更改为8.8.8.8
和8.8.4.4
(Google 的开放 DNS 解析器),看看情况是否会有所改善。或者,向 VPS 提供商询问其本地 DNS 设置,并确保它们在/etc/resolv.conf
(或 WHM/cPanel 中的设置位置)中设置正确。
答案3
如果您通过 SSH 连接到主机,我会同意 DNS 建议。但是,在这种情况下,您只是在测试处理 http 请求的延迟。
在 Chrome 浏览器中查看第一个网站,我获得了如下延迟信息:
2.04 秒(onload:2.04 秒,DOMContentLoaded:1.42 秒)
第二个站点是:
4.59 秒(onload:4.40 秒,DOMContentLoaded:4.21 秒)
我喜欢使用的另一个工具是检查主机。
站点 1:
http://check-host.net/check-report/1dc3fb
站点 2:
http://check-host.net/check-report/1dc3fa
从站点 1 开始还会出现一些其他的事情:
www.google-analytics.com
站点 2:
https://twitter.com/statuses/user_timeline/spare_brain.json?callback=twitterCallback2&count=5
我建议你也注册一下出色的 Google 网站管理员工具: