高森太郎のノート

このページについて

このページは、高森太郎がノート的に何でも書くページです。
主に勉強したこと、自分が知った知識や方法などを中心に、適当に、メモ的に、書き留めてます。

2016年10月02日 (日曜日)

[]netperfを使用して、連続である期間(24時間の間、1時間毎とか)測定するには netperfを使用して、連続である期間(24時間の間、1時間毎とか)測定するには - 高森太郎のノート を含むブックマーク はてなブックマーク - netperfを使用して、連続である期間(24時間の間、1時間毎とか)測定するには - 高森太郎のノート

概要

とある事情があってネットワークの速度と遅延を測定しなきゃならなくなった。

まぁさくっとNetperfを使わせて頂く…と言う所なのだが、実稼働しているネットワークの速度があった方がいいよね、と言うことになり、24時間測定、1時間毎をすることに。

そこでバッチファイルを作った。

一応

クリエイティブ・コモンズ・ライセンス
この 作品 は クリエイティブ・コモンズ 表示 - 継承 3.0 非移植 ライセンスの下に提供されています。

と言うことで。

バッチファイル

使用上の注意
  • なにはともあれ、はnetperfを作ってくださっている方々に感謝。
  • netperfのサーバの方はターゲットサーバで起動していないと測定できません。ただしプラットフォームをまたいでも大丈夫なので、Linux版のサーバにWindows版のクライアントから測定ができます。
  • バッチファイルと同じディレクトリにnetperfのバイナリを入れて使ってください。分ける場合は適当にパス通してね。
  • 最近のエディタはデフォルトだとUnicodeで保存しようとするので注意。SHIFT-JISでないと化けますよ。
  • netperfで測ったlatencyの単位はマイクロ秒。Pingはミリ秒。1秒は1000ミリ秒、1ミリ秒は1000マイクロ秒。
  • netperfはOSのスタックが対応するPingと違ってプログラムが応答するので、Pingよりも遅延が大きく出る傾向がある。一方で、HDDなど補助記憶の遅いIOの影響を受けずに動作するのでネットワークの速度を純粋に測定ができる。
中身

@echo off
rem 設定

rem 相手先サーバの名前
set targetsv=hogefuga.example.com

rem 測定間隔
rem 秒で指定する。300で5分、900で15分、1800で30分、3600で1時間。
rem netperfは瞬時に帯域を使い潰す様な挙動をするので、あまり短い間隔だと怒られます
set interval=1800

rem pingによる測定を行う場合には「Y」を設定する
rem Pingによる測定は時間がかかるが、見慣れた感じで測定できる
set ping_sokutei=Y
rem ping回数。あんまり多いと時間がかかるが、多めにすると通常問題ないがたまに死ぬようなケースを検出しやすいかも
set ping_n=100

rem ログファイルの名前。
rem 開始時刻の日付時間入り 2016102151112_netperf_log.txt みたいになる
rem 時間を生成
set time2=%time: =0%
set outlog=%date:~0,4%%date:~5,2%%date:~8,2%_%time2:~0,2%%time2:~3,2%%time2:~6,2%_netperf_%targetsv%_log.txt
set outlog_ping=%date:~0,4%%date:~5,2%%date:~8,2%_%time2:~0,2%%time2:~3,2%%time2:~6,2%_ping_%targetsv%_log.txt

rem ////////////////////////////////////////
rem 実起動
rem ////////////////////////////////////////

rem 起動時間を生成
set start_time=%date% %time:~0,8%

@echo ネットワークの速度と遅延を測定しています。%interval%秒ごとに測定
@echo 起動時間%start_time%
@echo 起動時間から24時間経過したら、右上の【×】で閉じること

rem ログファイルの初期化

@echo 測定開始%date% %time:~0,8% >%outlog%
@echo ##%COMPUTERNAME% >>%outlog%
@echo ##ipconfg /all >>%outlog%
@ipconfig /all >>%outlog%

if %ping_sokutei%==Y (
@echo 測定開始%date% %time:~0,8% >%outlog_ping%
@echo ##%COMPUTERNAME% >>%outlog_ping%
@echo ##ipconfg >>%outlog_ping%
@ipconfig /all >>%outlog_ping%
)


rem 最初の測定
rem 実行日時の書き込み
set /p X=%date% %time:~0,8%<nul >>%outlog%
set /p X=","<nul >>%outlog%

rem このときはバナーも
netperf -t omni -H %targetsv% -f M  -P 1 -- -d 2 -T TCP -o MIN_LATENCY,MEAN_LATENCY,MAX_LATENCY,THROUGHPUT,THROUGHPUT_UNITS >>%outlog%


rem 以下の内容を無限ループ。
rem 終了は手動で「×」

:sokutei

timeout %interval% /nobreak >nul

rem ばらつき考慮で2回計測する

rem 実行日時の書き込み
set /p X=%date% %time:~0,8%<nul >>%outlog%
set /p X=","<nul >>%outlog%

netperf -t omni -H %targetsv% -f M  -P 0 -- -d 2 -T TCP -o MIN_LATENCY,MEAN_LATENCY,MAX_LATENCY,THROUGHPUT >>%outlog%

set /p X=%date% %time:~0,8%<nul >>%outlog%
set /p X=","<nul >>%outlog%
netperf -t omni -H %targetsv% -f M  -P 0 -- -d 2 -T TCP -o MIN_LATENCY,MEAN_LATENCY,MAX_LATENCY,THROUGHPUT >>%outlog%

rem ping
if %ping_sokutei%==Y (
echo %date% %time:~0,8% >>%outlog_ping%
ping -n %ping_n% %targetsv% >>%outlog_ping%
)

rem ループの終了

@echo %date% %time:~0,8% の計測終了


goto sokutei

解説

後で書く…かもしれない。

とりあえずうちの環境では遅延がでかすぎて話にならない事が分かった。しぬ。もうDBのクライアント入れて直接アクセスするようなシステムはもう撲滅させたい。

ページの一番上へ