如何排查通过互联网网关连接 VPC 中的 Amazon EC2 Linux 实例和本地主机时出现的网络性能问题?

上次更新时间:2019 年 9 月 24 日

通过互联网网关连接 Amazon Elastic Compute Cloud (Amazon EC2) Linux 实例和本地主机时,我遇到了网络性能问题。如何排查这些数据包丢失或延迟问题?

解决方法

注意:开始排查前,请先确定源 IP 地址和目标 IP 地址。如果目标是一个 URL,请使用 dig 命令来确定 IP 地址。请注意,某些 URL 使用动态 IP 地址,因此 IP 地址可能会有所变化。多次运行命令以查看 IP 地址是不是常量。

使用 traceroute 检查网络问题

1.    运行以下命令以安装 traceroute。

Linux:

sudo yum install traceroute

Ubuntu:

sudo apt-get install traceroute

2.    运行以下命令以执行 traceroute。

基于 ICMP 的 traceroute:

sudo traceroute <Public IP of EC2 instance/on-premises host>

基于 TCP 的 traceroute:

sudo traceroute -T -p <destination port> <Public IP of EC2 instance/on-premises host>

3.    查看 traceroute 输出。

  • 确定延迟源是不是内部网络中的任何跃点。
  • 如果在前往目标的过程中出现突然的延迟高峰,那么在高峰开始出现的跃点上可能已出现问题。
  • 如果在中间跃点上出现高延迟,但在输出的开头或结尾没有出现延迟,则可能没有出现问题。在这种情况下,高延迟可能是因中间跃点取消了 traceroute 流量优先所致。

使用 MTR 排查数据包丢失问题

1.    运行以下命令以安装 MTR。
 
Linux:
sudo yum install mtr

Ubuntu:

sudo apt-get install mtr

2.    运行以下命令以执行 MTR。

基于 ICMP 的 MTR:

mtr -n -c <number of packets> <Public IP EC2 instance/on-premises host>

基于 TCP 的 MTR:

mtr -n -t -p <destination port> -c <number of packets> <Public IP EC2 instance/on-premises host>

3.    查看 MTR 输出。自下而上查看跃点。例如,检查最后一个跃点或目标上是否发生丢失,然后查看前面的跃点。

检查源主机或目标主机问题

如果您有权访问源主机或目标主机:

1.    运行 top 命令以确定问题是否与 CPU 和内存利用率或负载平均值有关。

2.    查看顶部输出:

  • 输出中的第三行表示 CPU 利用率。高 CPU 利用率会导致性能下降。
  • 第四行表示 RAM 使用情况,包括已用的总内存、可用的总内存和缓存的总缓冲区。
  • 如果 CPU 或内存利用率很高,请先确定原因,然后尽可能做出相应调整。

检查应用程序问题

如果 MTR 和 traceroute 输出未显示任何可疑内容,则延迟可能是由应用程序引起的。要确定是不是应用程序问题的缘故,请使用 hping3 工具将精心制作的数据包发送到应用程序正在侦听的端口。

1.    运行以下命令以安装 hping3。

Linux:

sudo yum --enablerepo=epel install hping3

Ubuntu:

sudo apt-get install hping3

2.    运行以下命令以向目标端口发送 TCP SYN 数据包。
注意:默认情况下,hping3 会将 TCP 标头发送到目标主机的端口 0,其窗口大小为 64,并且没有 TCP 标志。

hping3 -S -c <number of packets> -V <Public IP of EC2 instance/on-premises host> -P <destination port>

3.    查看 hping3 输出,以确定传输的数据包数量、接收的数据包数量,以及丢失的数据包数量(如果有)。通过使用这些数据,您可以确定应用程序是否满足对其提出的部分或全部请求。

使用 tcpdump 在源主机和目标主机上同时进行数据包捕获

如果以上步骤均无法帮您确定导致性能问题的原因,您可以执行数据包捕获来展开进一步调查。您可以使用数据包捕获来确定问题是否发生在主机级别,或是否与 TCP 堆栈有关。数据包捕获还可以显示大量的重新传输、分段,或格式错误的数据包。

1.    运行以下命令以安装 tcpdump。

Linux:

sudo yum install tcpdump

Ubuntu:

sudo apt-get install tcpdump

2.    运行 tcpdump 命令以测试数据包捕获示例。


这篇文章对您是否有帮助?

我们可以改进什么?


需要更多帮助吗?