我为一家技术公司提供支持。我试图在现场对我们的一个应用程序实例进行故障排除,并且需要监视TCP套接字缓冲区的充满度。
我知道,如果可以访问源代码,则可以在任何时间使用ioctl和SIOCOUTQ查询套接字缓冲区的充满度。
但是我没有。
所以我的问题是,有没有办法从应用程序外部查看套接字缓冲区的完整性?
Google将我引导至/proc/net/tcp,但我不确定100%是否确保tx_queue列正是我要的内容。是吗?
如果是这样,是否足够“实时”,我可以编写一个perl脚本来不断地对其进行轮询以查看套接字缓冲区的使用情况?
最佳答案
Proc和实时一样好,是的,当您在/proc下获取文件的内容时,它实际上是在内核中构建输出,而不是从文件或类似的文件中读取
正如乔恩所说,将无法读取缓冲区的内容,但是,如果您只是想知道自己是否正在接近队列限制,那么tx_queue是一个不错的选择。 (或者当然可能取决于延迟发生的地方的rx_queue)
现在我不知道您正在查看哪个应用程序,或者它在做什么,但是在bufferbloat标题下有一些有趣的读物,关于如何减小队列长度并让tcp更灵敏地处理速率变化实际上可能会更好。比监视队列(然后重新启动应用程序还是?)是一个更好的解决方案
关于linux - 我可以监视Linux套接字缓冲区的充满度吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12048116/