Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/136.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux网络堆栈何时丢弃接收到的RTP数据包? 我用C++程序接收RTP调试丢包问题。 在我的程序运行了相当长的一段时间,接收到大量的RTP数据后,它开始松包_C++_Debugging_Sockets_Rtp_Packet Loss - Fatal编程技术网

Linux网络堆栈何时丢弃接收到的RTP数据包? 我用C++程序接收RTP调试丢包问题。 在我的程序运行了相当长的一段时间,接收到大量的RTP数据后,它开始松包

Linux网络堆栈何时丢弃接收到的RTP数据包? 我用C++程序接收RTP调试丢包问题。 在我的程序运行了相当长的一段时间,接收到大量的RTP数据后,它开始松包,c++,debugging,sockets,rtp,packet-loss,C++,Debugging,Sockets,Rtp,Packet Loss,使用Wireshark进行跟踪会显示丢失的数据包,但我的应用程序从未收到它们。看起来网络堆栈在将它们交付给应用程序之前会先删除它们。重新启动我的应用程序后,一切都恢复正常 为了产生错误条件,我用RTP使机器过载,此时发生了数据包丢失,这是有充分理由的。但即使在我停止过载并开始以中等速率发送之后,数据包丢失仍然会发生,我必须重新启动应用程序才能再次接收所有数据 这是Linux接收缓冲区处理的问题吗?我可以检查哪些Linux统计数据来查看丢失的数据包的去向?您使用UDP输入的速度不够快。以下是一些常

使用Wireshark进行跟踪会显示丢失的数据包,但我的应用程序从未收到它们。看起来网络堆栈在将它们交付给应用程序之前会先删除它们。重新启动我的应用程序后,一切都恢复正常

为了产生错误条件,我用RTP使机器过载,此时发生了数据包丢失,这是有充分理由的。但即使在我停止过载并开始以中等速率发送之后,数据包丢失仍然会发生,我必须重新启动应用程序才能再次接收所有数据


这是Linux接收缓冲区处理的问题吗?我可以检查哪些Linux统计数据来查看丢失的数据包的去向?

您使用UDP输入的速度不够快。以下是一些常用的缓解措施:

  • 如果内核支持,则切换到以减少系统调用开销
  • 预分配输入处理期间使用的所有内存
  • 配置应用程序,查找热点并进行优化
  • 可能将处理分散到单独的线程,但要尽可能地保持锁定范围小
  • 增加套接字()

    • 您使用UDP输入的速度不够快。以下是一些常用的缓解措施:

      • 如果内核支持,则切换到以减少系统调用开销
      • 预分配输入处理期间使用的所有内存
      • 配置应用程序,查找热点并进行优化
      • 可能将处理分散到单独的线程,但要尽可能地保持锁定范围小
      • 增加套接字()

      当您在wireshark中看到它们时,它们会到达网络堆栈。netstat-s可以显示相当多的统计数据,从中可以得出一些结论,例如,操作系统缓冲区已满,因为您的应用程序没有足够快地接收()数据包或类似的数据包。@Plasmah:谢谢!如果我的应用程序读取速度不够快,您希望netstat-s中的哪些计数器增加?我不知道RTP是如何工作的,并且内核版本中的可用统计数据不同,但是如果它基于UDP,那么UDP:RcvbufErrors将是一个很强的指标(您可能还想检查缓冲区对于您的WOKR负载是否太小)我建议
      netstat-nptua
      ->您可以查看每个应用程序包的统计信息。在我的OpenSuse 12.2(Linux 3.4.11)上,我只看到应用程序名称的破折号。应用程序是否有办法设置其名称?当您在wireshark中看到它们时,它们会到达网络堆栈。netstat-s可以显示相当多的统计数据,从中可以得出一些结论,例如,操作系统缓冲区已满,因为您的应用程序没有足够快地接收()数据包或类似的数据包。@Plasmah:谢谢!如果我的应用程序读取速度不够快,您希望netstat-s中的哪些计数器增加?我不知道RTP是如何工作的,并且内核版本中的可用统计数据不同,但是如果它基于UDP,那么UDP:RcvbufErrors将是一个很强的指标(您可能还想检查缓冲区对于您的WOKR负载是否太小)我建议
      netstat-nptua
      ->您可以查看每个应用程序包的统计信息。在我的OpenSuse 12.2(Linux 3.4.11)上,我只看到应用程序名称的破折号。应用程序是否有方法设置其名称?