我如何才能找出是什么导致我的网络连接拥塞?

我如何才能找出是什么导致我的网络连接拥塞?

我之所以问这个问题,是因为有几次我们的服务器网络连接饱和了。我想知道是什么导致了网络负载。

我的第一个想法是制定一条iptables日志规则。例如:

/sbin/iptables -A INPUT -m mport --dports 20,80,53 -j LOG --log-prefix "Audit: "

但这种方法不太好用,因为我必须解析日志并收集统计数据。我更希望得到一些可以回答以下问题的东西:

  1. 每个监听端口有多少个活动的 TCP 连接
  2. 在设定的时间间隔内,特定端口上接收到了多少个 UDP 数据包
  3. 在过去 x 小时内哪个 IP 地址与我的服务器建立的连接最多

答案1

如果您拥有基于 redhat/centos/fedora 的发行版,则可以在 EPEL 存储库中找到 iftop 包,该包提供每个连接的细分信息,使您能够确定是否是某个特定主机导致了问题。

您可能需要命令“iftop -P -N”,它除了显示主机之外还显示端口,如下面的屏幕截图所示。

一些细节

在此处输入图片描述

也出现在 deb/ubuntu/gentoo repos 的某个地方...
sudo aptitude install iftop
yum install iftop
emerge iftop

关于您的3个问题;

1)每个监听端口有多少个活跃的 TCP 连接

netstat -ant | egrep 'ESTABLISHED' | awk '{print $4}' | \
awk -F: '{print $NF}' | sort -n | uniq -c


      5 22
      1 389
      1 766
      1 778
      1 812
      1 838
      1 4369

这是我脑海中最基本的想法,为了理解 netstat 的输出,您可以更改 grep 来添加或删除各种状态...

2) 在设定的时间间隔内,特定端口上接收到了多少个 UDP 数据包 3) 在过去 x 小时内哪个 IP 地址与我的服务器建立了最多连接

在这两种情况下,您都需要收集数据,就像您建议的那样,最简单的方法是某种 iptables -j LOG 规则。这个问题的第一个答案给出了一些例子;
https://stackoverflow.com/questions/349576/linux-retrieve-per-interface-sent-received-packet-counters-ethernet-ipv4-ipv

对于更通用的可视化工具,您可以考虑网络流量监控或者ntop从而生成更全面的报告和数据。

这里有一份相当全面的网络监控工具列表;
http://www.ubuntugeek.com/bandwidth-monitoring-tools-for-linux.html

答案2

运行数据包捕获,然后使用 Wireshark 进行分析,这应该会给你一个好主意。有很多教程可以帮助你弄清楚如何完成这一点。如果服务器恰好有 GUI,etherape 可以帮助你很容易地可视化正在发生的事情。

答案3

您可以使用或recent和/或limitiptables 模块。请查看这一页

相关内容