サーバーの応答時間監視バッチファイル

 オンラインゲームをしていると、回線が混雑する時間帯には遅延によってまともにプレイができなくなることがあります。あまりにも遅延がひどいと回線が落ちることにもあるので、混雑のピーク時は避けることも。
  私はFF14をやっていますが、パーティーを組んで攻略しているときに極端に遅延したり回線が落ちたりするとほかの方にも迷惑をかけてしまうので回線状況をリアルタイムで監視して遅延具合を確認できるバッチファイルを作成しました。これを使用すれば、ダンジョンなどに突入する前に混雑具合がわかるため、行くか行かないか判断できるかと。
 内容はpingを使用したもので、FF14に限らずほかのオンラインゲームやサーバーなどにも使用できます。回線の速度を監視するものですが、データのダウンロード速度(bps)ではなく、応答速度(ms)を監視するものになります。
 →遅延そのものをなんとかしたい場合はこっちを確認してみてください。

 (2017.03.25)
  混雑などが理由で発生するパケット損失も監視項目に取り入れたverも作りました。
   サーバーの応答時間監視バッチファイルver2
  

【できること】


  •  周期的にpingを使用して回線の応答速度から快適さを判断。(初期設定は1分周期)
      ー「すごく快適」、「快適」、「普通」、「厳しい」、「もうむりぽ」の5段階評価
  •  プレイに支障がある状況(「厳しい」以上)では警告音をならす。(初期設定はオフ)
      ー警告音は、モニタが1枚しかなくて監視窓を常時表示できない場合に使えるかも?
  •  ログを残せる。(初期設定はオフ)
      ーエクセルなどにコピペすれば時間ごとの状況をグラフで確認できます。
  •  監視対象やping周期、判断のしきい値などは設定で変更できる。


【解説】


 バッチファイルの中身については詳しく解説しませんが、主に下の流れになります。
 
  1. サーバーにpingを打って応答時間取得する。
  2. pingが帰ってこなければ回線落ちと判断する。
  3. 設定されていれば、現在時刻とpingの応答時間(最小,最大,平均)のログを残す。
  4. 応答時間から回線状態を判断する。
  5. 設定されていれば回線状況に応じて音を鳴らす。
  6. 一定時間待ってから上記を無限ループする。
※ 単純な監視目的のためwindowsの設定等を変更するようなことはしていません。

 デフォルトはGaiaサーバーを監視対象としていますが、変えたい場合は下に記載しているバッチファイル冒頭のIPアドレスを変更してください。なお、FF14の場合はワールドのサーバーとダンジョンのサーバーが異なるため厳密には目的の回線状況の監視にはなりませんが、目安にはなると思います。

 バッチファイルはここ(http://itpro.nikkeibp.co.jp/article/COLUMN/20100225/345058/?rt=nocnt)とかを参考に作成しています。



【使い方】


  1. 下の【バッチファイル】をメモ帳にコピペする。
  2. 冒頭の設定にあるWORLDの値を監視したいサーバーのIPアドレスに変更する。ちなみに、FF14の各サーバーのIPアドレスはここで確認できます。
  3. WAITTIMEとPINGTIMESはそれぞれループ時間とPingの回数ですが、変更しなくてもOK
  4. 判断のしきい値を変更したい場合はEXCELLENT等の値を変更する。
  5. 回線状況のログを残したい場合はLOGGINGを1に変更する。ログはバッチファイルと同じ場所に保存される。
  6. 回線状況が厳しいときに音を鳴らす場合はBEEPを1に変更する。
  7. メモ帳の"ファイル"→"名前をつけて保存"から○○.batの形で保存する。○○の部分はなんでもOK。ただし、保存する際には"ファイルの種類"を"すべてのファイル"に設定すること。
  8. メモ帳を閉じて保存したバッチファイルをダブルクリックで実行する。 
  9. サーバー監視が開始され、周期的にサーバーの状態が表示される


【バッチファイル】


 下記をコピペしてもOKですが、バッチファイル自体も置いときます。設定は【使い方】を参照して変更してください。
 サーバー監視.bat

↓↓↓↓↓↓ここからコピー↓↓↓↓↓↓
@echo off
title サーバー監視

:回線速度bpsではなく、応答時間で判断する。
:pingを確認するだけなのでFF14などのゲーム以外でも使用可能

:***********************設定**************************

:ワールドがあるサーバのIPアドレス(デフォルト:FF14のGaiaサーバ)
set WORLD=124.150.157.157

:1周期あたりの時間はループ待ち時間とping回数の合計
:ループの待ち時間(デフォルト:55秒)
set WAITTIME=55

:1ループで実行するpingの回数(デフォルト:5回)
set PINGTIMES=5

:しきい値設定(ms)
set EXCELLENT=10
set GOOD=20
set NORMAL=50
set BAD=100

:ログ作成の有無(0は作成しない。1は作成する)ログの保存場所はこのファイルと同じ場所
set LOGGING=0

:FINE値より悪化で警告音を鳴らす。(0は鳴らさない。1は鳴らす。)
set BEEP=0
:回線が死んでいる場合は設定によらず警告音がなります。

:一時ファイルの保存場所
set TEMPDIR=c:\temp

:*****************************************************

mkdir %TEMPDIR% > NUL 2>&1
set /A SKIP=%PINGTIMES%+6
set AVERAGEPING=0
if not %LOGGING%==0 (
if not %LOGGING%==1 (
echo ログ作成の設定が不正です。
pause
exit /B
)
)
if not %BEEP%==0 (
if not %BEEP%==1 (
echo ビープ音の設定が不正です。
pause
exit /B
)
)

:ログファイルと画面の初期化
if %LOGGING%==1 (
if not exist ping_daily.txt (echo 日付,時間,最小,最大,平均 > ping_daily.txt)
)
echo ************サーバー監視************
echo  時間        平均    状態
echo ------------------------------------


:以下無勉ループ
:loop
ping -n %PINGTIMES% %WORLD% > %TEMPDIR%\\pinglog.txt
@if errorlevel 1 GOTO NG
@if errorlevel 0 GOTO OK

:NG
echo 回線が死にました。。。
rundll32 user32.dll,MessageBeep
goto loop

:OK
if %LOGGING%==1 (
for /F "eol=; skip=%SKIP% tokens=3,6,9 delims=m " %%i in (%TEMPDIR%\\pinglog.txt) do (
@echo %DATE%,%time:~0,2%:%time:~3,2%:%time:~6,2%,%%i,%%j,%%k >> ping_daily.txt
set /a AVERAGEPING=%%k
)
)

if %LOGGING%==0 (
for /F "eol=; skip=%SKIP% tokens=3,6,9 delims=m " %%i in (%TEMPDIR%\\pinglog.txt) do (
set /a AVERAGEPING=%%k
)
)

if %AVERAGEPING% lss %EXCELLENT% echo %time:~0,2%:%time:~3,2%:%time:~6,2%    %AVERAGEPING%ms    とても快適です。
if %AVERAGEPING% geq %EXCELLENT% if %AVERAGEPING% lss %GOOD% echo %time:~0,2%:%time:~3,2%:%time:~6,2%    %AVERAGEPING%ms    快適です。
if %AVERAGEPING% geq %GOOD% if %AVERAGEPING% lss %NORMAL% echo %time:~0,2%:%time:~3,2%:%time:~6,2%     %AVERAGEPING%ms    普通です。

if %BEEP%==0 (
if %AVERAGEPING% geq %NORMAL% if %AVERAGEPING% lss %BAD% echo %time:~0,2%:%time:~3,2%:%time:~6,2%     %AVERAGEPING%ms    厳しいです。
if %AVERAGEPING% geq %BAD% echo %time:~0,2%:%time:~3,2%:%time:~6,2%    %AVERAGEPING%ms    もうむりぽ。
)

if %BEEP%==1 (
if %AVERAGEPING% geq %NORMAL% if %AVERAGEPING% lss %BAD% (
echo %time:~0,2%:%time:~3,2%:%time:~6,2%     %AVERAGEPING%ms    厳しいです。
rundll32 user32.dll,MessageBeep
)
if %AVERAGEPING% geq %BAD% (
echo %time:~0,2%:%time:~3,2%:%time:~6,2%    %AVERAGEPING%ms    もうむりぽ。
rundll32 user32.dll,MessageBeep
)
)

timeout %WAITTIME% > NUL
goto loop

↑↑↑↑↑↑ここまでコピー↑↑↑↑↑↑


0 件のコメント:

コメントを投稿