プログラムが Java オブジェクトをネットワーク経由で送信するために使用する帯域幅の量を測定しようとしています。オブジェクトをディスクにシリアル化し、ファイル サイズを指標として使用できると思っていましたが、そうではないようです。私がしたことは、tcpdump でネットワークの使用状況をキャプチャしながら、オブジェクトをファイルにシリアル化することでした。
sudo tcpdump -l -i lo port 54544 | tee test_112_512
次に、使用された合計トラフィックを決定するために、次のコマンドを使用しました。
cat test_112_512 | grep '54544 >' | awk '{N = N + $NF + 20} END {print N}'
20 バイトは、長さを報告するときに tcpdump が考慮しない TCP ヘッダー (~250 パケット) を考慮するためのものです。grep の部分は、戻ってくるトラフィックを無視することです。私はそれに興味がないからです。
この方法を使用すると、ネットワーク トラフィックの合計がディスク上のファイル サイズよりも最大 10% 少なくなることがわかりました。ディスク上のファイルには TCP ヘッダーがないため、これは予期しない結果です。私は何か間違ったことをしていますか?