В моем приложении 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_queue и rx_queue равны 0. Таким образом, нет никаких пакетов, сохраненных в буфере приема UDP?
Но если я возьму tcpdump, то увижу, что большое количество пакетов, приходящих на сервер и сервер, может обработать только 10% всех этих пакетов. поэтому остальные 90% должны храниться в приемном буфере UDP.
Что я пропускаю или не понимаю?