2014-02-21 115 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 

注意自己能夠接收的字節數確實是唯一重要的值,用作爲模板來提取發送的字節如果需要。

將睡眠值更改爲您需要的任何間隔(以秒爲單位),如果需要重定向到文件。

相關問題