linux 查看udp的接收情况,linux – UDP接收队列满了吗?

我有一个应用程序在端口12201上接收大量UDP流量,我注意到一些UDP数据包永远不会进入应用程序(仅由内核接收).

我跑的时候

netstat -c --udp -an | grep 12201

我可以看到Recv-Q几乎总是126408,很少低于,从未超过:

Proto Recv-Q Send-Q Local Address Foreign Address State

udp 126408 0 :::12201 :::*

udp 126408 0 :::12201 :::*

udp 126408 0 :::12201 :::*

udp 126408 0 :::12201 :::*

udp 126408 0 :::12201 :::*

udp 126408 0 :::12201 :::*

udp 126408 0 :::12201 :::*

udp 126408 0 :::12201 :::*

udp 126408 0 :::12201 :::*

udp 126408 0 :::12201 :::*

udp 126408 0 :::12201 :::*

udp 126408 0 :::12201 :::*

udp 126408 0 :::12201 :::*

udp 126408 0 :::12201 :::*

udp 126408 0 :::12201 :::*

udp 126408 0 :::12201 :::*

udp 126408 0 :::12201 :::*

这是否意味着接收队列已满?编号126408来自哪里?我该如何增加它?

Sysctl配置:

# sysctl -a | grep mem

vm.overcommit_memory = 0

vm.nr_hugepages_mempolicy = 0

vm.lowmem_reserve_ratio = 256 256 32

vm.meminfo_legacy_layout = 1

vm.memory_failure_early_kill = 0

vm.memory_failure_recovery = 1

net.core.wmem_max = 124928

net.core.rmem_max = 33554432

net.core.wmem_default = 124928

net.core.rmem_default = 124928

net.core.optmem_max = 20480

net.ipv4.igmp_max_memberships = 20

net.ipv4.tcp_mem = 365760 487680 731520

net.ipv4.tcp_wmem = 4096 16384 4194304

net.ipv4.tcp_rmem = 4096 87380 4194304

net.ipv4.udp_mem = 262144 327680 393216

net.ipv4.udp_rmem_min = 4096

net.ipv4.udp_wmem_min = 4096

解决方法:

看起来您的应用程序使用系统默认接收缓冲区,该缓冲区是通过sysctl定义的

net.core.rmem_default = 124928

因此,您可以看到Recv-Q的上限接近上方.尝试将应用程序中的SO_RCVBUF套接字选项更改为更高的值,可能达到最大限制.如sysctl设置net.core.rmem_max = 33554432中所定义

由于队列已满而丢弃的数据包计数,可以通过netstat -us查看(查找数据包接收错误)

标签:udp,linux

来源: https://codeday.me/bug/20190623/1273674.html

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值