当前位置: 首页 > 面试题库 >

如何监视Linux UDP缓冲区的可用空间?

缪朝
2023-03-14
问题内容

我在linux上有一个Java应用程序,它可以打开UDP套接字并等待消息。

在高负载下运行了几个小时之后,有一个数据包丢失,即数据包被内核接收,但不是由我的应用程序接收(我们在嗅探器中看到丢失的数据包,在netstat中看到UDP数据包丢失,我们没有看到这些数据包)在我们的应用日志中)。

我们尝试扩大套接字缓冲区,但这并没有帮助-我们早些时候就开始丢失数据包,仅此而已。

对于调试,我想知道在任何给定时刻OS udp缓冲区有多满。谷歌搜索,但没有找到任何东西。你能帮助我吗?

PS伙计们,我知道UDP不可靠。但是-我的计算机收到所有UDP消息,而我的应用无法使用其中的一些消息。我想最大程度地优化我的应用,这就是问题的原因。谢谢。


问题答案:

Linux提供了文件/proc/net/udp/proc/net/udp6,其中列出了所有打开的UDP套接字(分别用于IPv4和IPv6)。在这两个字段中,列tx_queuerx_queue以字节显示出站队列和入站队列。

如果一切正常,在这两列中通常不会看到任何与零不同的值:应用程序生成数据包后,它们将通过网络发送,而一旦这些数据包从网络到达,则应用程序将被唤醒并接收它们(recv呼叫立即返回)。rx_queue如果您的应用程序打开了套接字但没有调用recv接收数据,或者没有足够快地处理此类数据,则可能会看到上升。



 类似资料:
  • GSAIOException:错误代码:393238缓冲区溢出,没有可用空间 但我不知道这意味着什么。谁能解释一下是哪种例外。我可以在哪里搜索代码找到问题?

  • 问题内容: 嗨,我有一个非常难看的问题:java.net.SocketException:没有可用的缓冲区空间(已达到最大连接?)这是客户端服务器应用程序。客户端是Windows XP SP2 32b,具有两个网卡核心对。Java 1.6。u7。应用程序打开了几个用于本地通信的服务器套接字,以及几个用于rmi到jboss服务器的客户端套接字。 几个小时/天后!我无法打开任何新的客户端套接字来与服务

  • 我们接近100人。proto文件,其中每个文件可以定义大约10个IDL结构(如服务或消息)。 有没有一种方法可以可视化它们,包括引用(从一个文件到另一个文件)。例如类似于UML类图。 可能有可配置的可视化Java /C。 引用自https://developers.google.com/protocol-buffers/docs/overview 协议缓冲区现在是谷歌的通用数据语言——在撰写本文时

  • 我正在尝试向arduino的串行监视器发送一些数据,并使led亮起,但我还无法获取它。我的代码中有什么问题请检查这里是arduino代码 下面是java代码

  • 如何更改仍为3M的缓冲区 当前启动命令: ffmpeg-f dshow-i video=“屏幕捕获录像机”-vcodec libx264-预设:v ultrafast-过滤器:v“crop=480:270:0:0”-vf tpad=start_duration=30-r 30-g 60-keyint_min 60-sc_阈值0-b:v 1G-最大速率2500k-bufsize 1G-rtbufsi

  • 我试图将模具缓冲区放入纹理中,以便在延迟渲染器中使用。 但是,当我尝试使用