我的应用程序遇到了一些问题,并且很想知道任何特定时刻的网络缓冲区使用情况。
我正在使用 CentOS 6 Linux 机器。
我知道默认值存在于 /proc/sys/net/core/
但是我没能成功找到缓冲区的当前使用情况。如果有人知道如何找到当前使用情况,请告诉我。
提前致谢。
答案1
如果您运行ss
或netstat
值Recv-Q
并Send-Q
产生此输出。
IE
$ ss -nt
State Recv-Q Send-Q Local Address:Port Peer Address:Port
ESTAB 203 0 192.168.1.2:36122 198.xxx.xxx.xxx:80
CLOSE-WAIT 1 0 192.168.1.2:43870 140.xxx.xxx.xxx:80
我添加了一个简单的 python 程序来演示这一点。
#/usr/bin/python
from time import sleep
from socket import *
import subprocess
if __name__ == "__main__":
sock = socket(AF_INET, SOCK_STREAM)
sock.setsockopt(IPPROTO_TCP, TCP_CORK, 1)
sock.connect(('www.google.com', 80))
length = sock.send("GET / HTTP/1.1\r\nHost: www.google.com\r\n\r\n")
sport = sock.getsockname()[1]
print "Length of sent data: {0}".format(length)
subprocess.call(["ss" ,"-nt", "sport", "=", ":{0}".format(sport)])
sock.close()
产生
Length of sent data: 40
State Recv-Q Send-Q Local Address:Port Peer Address:Port
ESTAB 0 40 192.168.1.2:34259 173.194.41.180:80
答案2
我首先想到的是,尝试- 应该打印套接字队列大小,通过//ss -m
传递输出应该将它们总结起来。grep
cut
awk