我有一个应用程序将日志发送到驻留在不同计算机上的日志服务器。这些日志作为UDP数据包发送。我的问题是我看到UDP日志丢失。我在UDP数据包中有一个正在运行的序列号,它与日志消息一起打印。我在日志服务器上看到了序列号的间隙。起初我怀疑我的日志服务器是罪魁祸首,但看起来问题是发送方机器丢弃数据包。环境是:
发送器和接收器都在带有CentOS 6.4(2.6.32-358.el6.i686)的HP G8服务器上运行。以下是我已经尝试或观察过的事情:
- SndbufErrors和RcvbufErrors在发送方和接收方都是0(/ proc / net / snmp)
- ifconfig不显示任何错误
- 这些机器所连接的交换机不会报告任何丢弃/错误
- 在发送方运行tcpdump(增加tcpdump的缓冲区以便tcpdump报告丢弃0个数据包)显示接收方丢失的数据包实际上没有发送(或者至少那些数据包没有显示在captupred pcaps上)
- 发送数据包的最大速率约为每秒30K(速率不是恒定的。通常它会保持非常低的速度,每秒约500次,偶尔会出现尖峰。数据包在这些峰值期间会丢失)。接口为100Mbps链路。
- 数据包的大小从大约80字节到300字节不等。
- NIC上的环形缓冲区是:
eth0的环参数:
预设最大值:
RX:2047
RX Mini:0
RX Jumbo:0
TX:511
当前硬件设置:
RX:200
RX Mini:0
RX Jumbo:0
TX:511
- 网卡驱动信息:
司机:tg3
版本:3.124
firmware-version:5719-v1.38 NCSI v1.2.37.0
公交信息:0000:03:00.0
支持 - 统计:是的
支持 - 测试:是的
支持-eeprom-access:是的
supports-register-dump:是的
supports-priv-flags:no
- NIC统计信息也显示没有错误(通过ethtool -S eth0)
- 如果我在与发件人相同的计算机上运行我的日志服务器,则不会丢失日志。
醇>
我无能为力地丢弃这些数据包(stack / NIC / NW ...)。我知道UDP不可靠,并且由于多种原因可以丢弃数据包。但我仍然无法找到为什么这些数据包在我的情况下在发送方被丢弃的原因。另一方面,我的应用程序还有许多TCP连接(大约8-10个),每个连接都有流量。