2014-02-21 117 views
2

对于基准测试,我目前正在寻找一种方法来对某些似乎有问题的TCP连接进行基准测试。为此,我想在程序运行时记录一些性能指标。我已经记录了每个操作的时间,但是这只是告诉我传输对于用例来说太长了。如何找出套接字的传输/接收字节数

我需要的是一种简单的方法来跟踪定期读取/写入的字节数。通常我只是手动添加基准测试,但套接字在库中使用,所以我无法轻松地进行读/写调用。我的猜测是,有一些现成的Linux提供的方法,可以做到这一点,但我找不到它。

我已经看过getsockopt()TCP_INFO标志的可能性,但从文档中我只能看到如何从中获得窗口大小等,而不是读取/写入的字节数。

有什么办法从Linux获取这些信息吗?

回答

1

尝试tcpdump,定义一个过滤器,该过滤器仅侦听程序正在通信的端口/地址并总计打印长度属性。

0

使用Kernel Probes您可以“分解为”正在运行的内核/系统调用并读取/记录它们的参数。对read()/recv*()和/或write()/send*()这样做可能会对您有所帮助。

0

你也许可以看看/proc/net/tcp文件的内容读一些的recv /发送统计netstat工具在大多数Linux系统上做同样的事情,但在一个更清洁的方式。

在你的程序中,在不同的时间点解析这个文件来收集在一个套接字上收到/发送的字节信息,虽然我不确定它是否可以映射特定TCP套接字的字节。

0

如果您正在查看套接字或需要计算给定接口上的整个RX/TX字节数量,则不确定。我需要解决后一个问题,刮起了下面的脚本,可能对你有用:

while true; do MARKER=$(ifconfig eth0 | grep "[RT]X bytes" | awk '{print $2}' | cut -c 7-); sleep 10; NEWMARKER=$(ifconfig eth0 | grep "[RT]X bytes" | awk '{print $2}' | cut -c 7-); expr ${NEWMARKER} - ${MARKER}; set $MARKER=$NEWMARKER; done 

注意自己能够接收的字节数确实是唯一重要的值,用作为模板来提取发送的字节如果需要。

将睡眠值更改为您需要的任何间隔(以秒为单位),如果需要重定向到文件。

相关问题