在我的java服务器应用程序中,每秒有1000个udp数据包。但我的应用程序每秒只能处理100个数据包。所以我的服务器每秒大约有900个udp包无法处理。
服务器应用程序正在执行类似的操作。
while(true)
{
serverSocket.receive(receivePacket);
process(receivePacket); // takes around 50ms to complete
serverSocket.send(sendPacket);
}
据我所知,这些未处理的数据包被存储在操作系统的udp接收缓冲区中。当这个缓冲区变满时,操作系统将丢弃这些数据包。
但问题是当我运行命令查看我的udp缓冲区大小时。
cat /proc/net/udp
它显示我的udp套接字缓冲区中没有存储任何内容
cat /proc/net/udp
sl local_address rem_address st tx_queue rx_queue tr tm->when retrnsmt uid timeout inode ref pointer drops
4: FCA9C11F:C36F 8C719AC6:0035 01 00000000:00000000 00:00000000 00000000 0 0 2983494501 2 ffff880169aff4c0 0
5: FCA9C11F:D3F0 8C719AC6:0035 01 00000000:00000000 00:00000000 00000000 0 0 2983494485 2 ffff8801b9bbedc0 0
16: 7A52BB59:007B 00000000:0000 07 00000000:00000000 00:00000000 00000000 38 0 2438608536 2 ffff8807656764c0 0
16: A2EE0D55:007B 00000000:0000 07 00000000:00000000 00:00000000 00000000 38 0 2438608045 2 ffff88077ccdd7c0 0
16: A58F466D:007B 00000000:0000 07 00000000:00000000 00:00000000 00000000 38 0 2438607809 2 ffff8801129f6240 0
显示没有丢包,TX U队列和RX U队列的大小为0。所以udp接收缓冲区中没有数据包?
但是如果我使用tcpdump,那么我可以看到很多数据包a到达服务器,服务器只能处理10%的数据包。所以另外90%应该存储在udp接收缓冲区中。
我错过了什么,还是不明白?