我们的服务器有时会出现 90% 以上的数据包丢失,但这种情况并不总是会发生。目前它运行正常,但就在半小时前,它出现了同样的问题。
我们的服务提供商告诉我们要使用恢复系统来测试这是否真的是硬件问题而不是我们这边的软件问题。但是,我没有看到任何可能导致我们这边数据包丢失的东西,尤其是当它不一致时。
在对恢复系统进行其他测试之前,我们可以检查什么吗?
我们在 Hetzner.de 有一个专用服务器。它连接到 100MBit 以太网。我们没有尝试在硬件方面进行任何更改,因为我们的服务器提供商希望我们在继续检查硬件之前先检查软件。
这是我制作的 mtr 报告。报告期间,我们出现了 3 次数据包丢失,其余时间服务器均可访问:
客户端到服务器
HOST: mbp Loss% Snt Last Avg Best Wrst StDev
1.|-- 10.0.1.1 0.0% 1000 0.4 0.2 0.2 3.4 0.2
2.|-- 10.0.1.1 0.3% 1000 27.5 29.7 5.9 237.3 34.6
3.|-- 10.170.172.121 0.4% 1000 17.2 41.9 7.2 334.1 44.2
4.|-- 216.113.123.158 1.4% 1000 44.4 58.6 10.6 299.6 49.2
5.|-- 216.113.123.194 1.1% 1000 36.6 72.9 19.4 330.7 48.1
6.|-- paix-nyc.init7.net 0.7% 1000 57.1 75.8 18.4 313.8 49.1
7.|-- r1lon1.core.init7.net 1.4% 1000 199.8 150.9 87.1 373.7 56.4
8.|-- r1fra1.core.init7.net 0.6% 1000 244.2 150.1 98.6 438.6 53.6
9.|-- gw-hetzner.init7.net 1.4% 1000 175.3 140.6 100.5 397.2 49.7
10.|-- hos-bb2.juniper2.rz16.het 39.0% 1000 120.0 136.7 103.5 362.6 44.3
11.|-- hos-tr4.ex3k13.rz16.hetzn 0.8% 1000 145.4 132.2 106.8 393.3 36.9
12.|-- static.98.43.9.5.clients. 39.8% 1000 116.0 131.5 106.1 371.8 34.4
服务器到客户端
HOST: thetransitapp Loss% Snt Last Avg Best Wrst StDev
1. static.97.43.9.5.clients.you 29.0% 1000 7.2 7.4 0.9 24.9 1.9
2. hos-tr1.juniper1.rz16.hetzne 38.7% 1000 6.1 9.6 0.2 78.8 7.6
3. hos-bb2.juniper4.ffm.hetzner 36.2% 1000 11.8 11.4 5.8 29.0 1.5
4. r1fra1.core.init7.net 38.1% 1000 12.4 13.9 5.5 22.9 3.9
5. r1lon1.core.init7.net 36.3% 1000 23.5 26.5 17.6 37.6 4.4
6. r1nyc1.core.init7.net 35.5% 1000 92.3 93.8 86.1 103.0 3.7
7. paix-ny.ia-unyc-bb05.vtl.net 35.5% 1000 95.5 96.4 87.6 134.7 5.3
8. 216.113.123.169 36.3% 1000 101.5 102.0 94.4 124.9 3.6
9. 216.113.124.42 34.7% 1000 113.1 107.7 96.7 117.6 3.6
10. 216.113.123.157 37.5% 999 106.5 107.4 101.5 115.0 1.5
11. ??? 100.0 999 0.0 0.0 0.0 0.0 0.0
12. modemcable004.103-176-173.mc 36.7% 999 111.2 147.9 107.2 342.0 48.3
这是以太网配置
Settings for eth0:
Supported ports: [ TP MII ]
Supported link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
1000baseT/Half 1000baseT/Full
Supports auto-negotiation: Yes
Advertised link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
1000baseT/Half 1000baseT/Full
Advertised pause frame use: No
Advertised auto-negotiation: Yes
Link partner advertised link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
1000baseT/Full
Link partner advertised pause frame use: No
Link partner advertised auto-negotiation: Yes
Speed: 1000Mb/s
Duplex: Full
Port: MII
PHYAD: 0
Transceiver: internal
Auto-negotiation: on
Supports Wake-on: pumbg
Wake-on: g
Current message level: 0x00000033 (51)
Link detected: yes
eth0的ifconfig:
eth0 Link encap:Ethernet HWaddr c8:60:00:bd:2f:9d
inet addr:5.9.43.98 Bcast:5.9.43.127 Mask:255.255.255.224
inet6 addr: fe80::ca60:ff:febd:2f9d/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:3521 errors:0 dropped:0 overruns:0 frame:0
TX packets:2117 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:2882770 (2.7 MiB) TX bytes:910907 (889.5 KiB)
Interrupt:30 Base address:0x8000
答案1
我认为这是 hetzner 的错。关于类似的案件,我已经与他们争论了很长时间。
我们遇到了这些问题,并向托管公司报告了这个问题。答案总是相同的 - “请将 mtr 连接到两个方向” - 即使在故障期间他们也会这样回答。所以我们确实编写了一个守护进程,每次服务器之间出现任何数据包丢失时都会启动 mtr:
如果 [ -z $1 ] ; 那么 echo “给出目标主机” 别的 主机=$1 while true ; 执行 损失 =`ping -c 10 $host | grep 数据包 | awk {'打印 $6'} | sed s/%//g` 如果 [ $loss -ge 1 ]; 那么 echo `日期` >> /root/scripts/loss_measure_mtr.log mtr -s 1500 -r -c 1000 -i 0.1 $host >> /root/scripts/loss_measure_mtr.log 菲 完毕 菲
然后他们根据这些信息回答道:
此时子网中发生了传入攻击。在这种情况下 同一子网内的服务器可能发生数据包丢失。 此致 迈克尔·斯特雷茨 Hetzner 在线股份公司 支持 90431 纽伦堡 / 德国 电话:+49 (911) 234 226 54 传真:+49 (911) 234 226 8 977 http://www.hetzner.de
到底发生了什么?我不知道,但看起来几乎一样:
2012 年 8 月 12 日 星期日 01:13:20 CEST 主机:应用程序损失率 Snt 最后平均值 最佳 Wrst 标准差 1. 94.1% 1000 0.2 0.2 0.1 0.4 0.1 2. 静态.1.24.24.46.客户端.您 0.0% 1000 3.0 1.9 0.7 19.4 1.5 3. hos-tr4.juniper2.rz13.hetzne 9.4% 1000 0.6 1.9 0.4 133.2 8.0 4. hos-bb2.juniper1.rz1.hetzner 5.4% 1000 38.6 7.1 3.0 112.9 11.5 5. hos-tr1.ex3k3.rz1.hetzner.de 10.9% 1000 4.4 5.1 3.6 23.6 1.8** 6. 静态.88-128-24-108.客户端 15.5% 1000 3.6 3.5 3.4 4.6 0.1 主机:应用程序损失率 Snt 最后平均值 最佳 Wrst 标准差 1. 94.5% 1000 0.2 0.2 0.1 0.6 0.1 2. 静态.1.24.24.46.客户端.您 0.0% 1000 1.2 1.9 0.7 19.3 1.6 3. hos-tr4.juniper2.rz13.hetzne 9.3% 1000 0.6 1.8 0.4 136.8 7.9 4. hos-bb2.juniper1.rz1.hetzner 2.7% 1000 3.3 7.0 3.0 113.1 11.5 5. hos-tr1.ex3k3.rz1.hetzner.de 8.5% 1000 7.0 5.1 3.6 26.8 2.0 6. 静态.88-128-24-108.客户端 12.8% 1000 3.6 3.5 3.3 4.5 0.1 我有几十个这样的mtr。
我认为是他们的基础设施问题。请注意节点上发生了丢失:hos-tr1.ex3k3.rz1.hetzner.de,hos-tr4.juniper2.rz13.hetzner.de等等。
如果他们不解决这个问题,我可能会迁移到 linode 或 amazon。
答案2
这不是一个答案,但它太长了,无法作为评论,因此我将其作为答案发布。
我不完全同意现有答案中的评估和对这个问题的一些评论。
使用任何通过 ping 和 traceroute 使用 ICMP 的工具(如果我理解它的工作原理的话,比如 mtr)的问题在于,该工具正在测试路径中的每一跳如何响应 ICMP 流量,这意味着测试被发送到每一跳,然后测量该跳的响应。这不是对路径中每一跳的路径质量的真正测试,这意味着它没有测试通过路径的“真实”流量的传输。每一跳都可能选择为基于 ICMP 的测试提供低优先级,或者它可能完全放弃它,因此从一跳到下一跳的结果会有所不同。如果您在第 10 跳处遇到真正的问题(在您的第一个屏幕截图中),那么该问题将延续(并累积)在每个连续的跳跃中。正如您在屏幕截图中看到的那样,第 10 跳显示 39% 的数据包丢失,但第 11 跳几乎没有显示数据包丢失。如果第 10 跳真的丢弃了“真实”流量,那么问题也会在跳 11 跳处出现。事实上,跳 11 可能会显示更多的数据包丢失(跳 10 处的丢失、跳 10 和 11 之间的链路上的丢失以及跳 11 处的丢失的累计)。
您应该做的是使用从一端到另一端发送真实流量的工具(如 iperf)进行测试。