我使用Netty(一个java网络框架)来服务UDP请求。
我找到了
SO_RCVBUF
和
的/ proc / SYS /净/型芯/ rmem_default
和
的/ proc /净/ UDP
输出令人困惑:
通过插座手册(man 7 socket)说明:
rmem_default 包含套接字接收的默认设置(以字节为单位) 缓冲。
rmem_max 包含最大套接字接收缓冲区大小,以字节为单位 用户可以使用SO_RCVBUF套接字选项进行设置。
和/ proc / net / udp显示的是udp接收队列大小:
sl local_address rem_address st tx_queue rx_queue tr tm->when retrnsmt uid timeout inode
60: 00000000:2F3C 00000000:0000 07 00000000:0003E094 00:00000000 00000000 500 0 2224362 2 ffff810066908cc0
我可以获得 SO_RCVBUF = 12904,但 rx_queue 大小为254100(3E094), rmem_default 为262142
我的困惑是,为什么SO_RCVBUF不等于rmem_default,为什么队列大小不等于SO_RCVBUF(但大于它)?
它将ctx.channel().config().getOption(ChannelOption.SO_RCVBUF)
的值设为/proc/sys/net/core/rmem_default
的一半,而实际的接收缓冲区大小(队列大小)也是/proc/sys/net/core/rmem_default
的值
那么为什么ctx.channel().config().getOption(ChannelOption.SO_RCVBUF)
不等于系统的配置?
答案 0 :(得分:-1)
你似乎误读了输出。正确排列列后,rx_queue
为零。