除了netstat,还有其他方法可以调试UDP发送缓冲区错误吗



我不明白为什么会出现UDP发送缓冲区错误。我正在通过RTPS协议(Fast DDS(通过UDP发送约5MB的图像,但netstat -s -u给了我以下输出:

IcmpMsg:
InType3: 14158
InType11: 88
OutType3: 14188
Udp:
581757 packets received
754 packets to unknown port received
0 packet receive errors
862941 packets sent
0 receive buffer errors
2296 send buffer errors
IgnoredMulti: 4109
UdpLite:
IpExt:
InMcastPkts: 13962
OutMcastPkts: 13967
InBcastPkts: 4109
InOctets: 1803899484
OutOctets: 1469914952
InMcastOctets: 4496120
OutMcastOctets: 4426432
InBcastOctets: 320353
InNoECTPkts: 1820538

我有2296个发送缓冲区错误,所以我想我会将UDP缓冲区大小增加到以下设置:

net.core.rmem_default = 26214400
net.core.rmem_max = 26214400
net.core.wmem_default = 26214400
net.core.wmem_max = 26214400
net.core.somaxconn = 4096
net.core.netdev_max_backlog = 65536
net.core.optmem_max = 26214400
net.ipv4.udp_mem = 8388608 12582912 16777216
net.ipv4.udp_rmem_min = 16384
net.ipv4.udp_wmem_min = 16384

不幸的是,这并没有起到任何作用,并且仍然会产生发送缓冲区错误。

除了使用此netstat -s -u命令之外,还有其他方法可以对此进行调试吗?或者我应该找其他地方解决问题吗?问题可能出现在接收操作系统上吗?

设置:Debian Buster&lt-(以太网(->Debian Buster

结果如下:任何以太网适配器的标准txqueuelen都被设置为1000,因此,如果您在传输队列中填充了太多数据,数据就会被丢弃。

您可以使用以下命令设置txqueuelen参数:

ifconfig ${interface} txqueuelen ${size}

尺寸必须在1000到20000之间。对我来说,命令如下:

ifconfig vnet0 txqueuelen 10000

你可以在这里的小教程中找到关于这个主题的额外信息。

最新更新