代码之家  ›  专栏  ›  技术社区  ›  Al-Alamin

为什么udp接收缓冲区大小(rx_队列)没有增加?

  •  0
  • Al-Alamin  · 技术社区  · 6 年前

    在我的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接收缓冲区中。

    我错过了什么,还是不明白?

    0 回复  |  直到 6 年前