Ver. b19.06.30, Last update: 2019/06/30, (c)2017-2019 hirosejn
Index
Environment
動作環境 ↑
Chrome:Ver74以降にて動作検証(推奨)
Edge:基本動作検証済
ie8 :基本動作検証済、注:Chroneに比べ5倍程度遅い。
Items
画面の構成要素 ↑
- 右メニュー
:機能をアコーディオンメニュー形式で表示 - 右上メッセージエリア
:ファイル読込処理結果等のメッセージを表示(ダイアログの操作で移動/リサイズ可) - 上段全体グラフ
:指定ファイルを、フィルター条件でフィルターしたデータを表示 - 下段詳細グラフ
:上段表示データのうち「下段詳細グラフ表示条件」による指定期間のデータを表示 - 下段データ表示エリア
:下段詳細グラフで、マウスオーバにより選択されたプロットに該当する、ファイルのレコードを表示。(ダイアログの操作で移動/リサイズ可) - ダイアログ:
【閉じる】:ダイアログ右上のバツボタン。
【移動】:上部にマウスオーバすると表示されるグレーのバーをドラッグする。
【リサイズ】:四隅四辺にマウスオーバし、マウスがリサイズアイコンになった状態からドラッグする。
Graph
グラフの操作方法 ↑
マウスオーバー :X軸の最も近い時刻のプロットが選択され強調表示される。
下段グラフの場合は、選択プロットの時刻に同時処理(CONC)している処理の開始時刻―終了時刻を結ぶ線が表示される(同時処理が視認し易く表示されるので、容易に排他解放待ちの有無を特定できる)。下部データ表示エリアに、選択プロットの元ファイルのレコードが表示される(排他処理を容易に特定できる)。
マウスクリック/タッチ :選択されたプロットを基準に、下段詳細グラフが更新され、「下段詳細グラフ表示条件」アイコンが追加される。
マウスドラッグ(横/縦) :指定範囲を横幅/縦幅としてグラフを拡大表示する。
マウスダブルクリック :マウスドラッグによるグラフの拡大表示をリセットする。(左上の「reset zoom」ボタンも同一機能)
Menu
メニューの操作方法 ↑
- メッセージ表示エリア :処理結果メッセージを表示する。マウスによる移動(エリア上部選択)/リサイズに対応。
- Place on/side ボタン:メニューをグラフに「重ねる/重ねない」を切り替える。
- reset zoom ボタン:グラフの描画サイズを初期化する。(Androidでグラフのダブルクリックができないため設置)
- バツ/ハンバーガー ボタン:メニューの「表示/非表示」を切り替える
Menu-File
メニュー/Fileの操作方法 ↑
ボタン
Open csv data file ボタン:CSVファイルを選択。ファイルを選択するとグラフを表示する。
指定項目
Open file as :データ読込モード指定
◎newly :新規に読み込む(既存データを破棄) ○append :既存データに指定ファイルの内容を追加する
----- File format definition --------
[Line feed code] :CSVファイルの改行コードを指定
○固定長 "80"byte / ◎Windows:CR(13)+CF(10) / ○UNIX/Linux:LF(10) / ○zOS:NEL(15) / ○Max:CR(13) / ○other charcode (" ") 文字コード番地を10進で指定
[Charset] :CSVファイルの文字コードを指定(レコードデータ表示時に指定文字コードからUnicodeに変換して表示)
○Shift-JIS /○EUC-JP / ◎UTF-8 / ○Unicode
[CSV delimiter] :CSVファイルのデリミタを指定
○comma :カンマ区切り/ ◎tab :タブ区切り/ ○other "," 区切り文字を指定する
----- Data format definition --------
CSVのカラムが保有するデータ構成を指定
○TAT & START time /◎TAT & END time / ○START & END time
[Timestamp field] :終了時刻のフィールドの位置とフォーマットを指定
"1"th column of CSV:CSVのカラム位置を指定(デフォルト1カラム目、固定長レコードの場合1を指定)
Position(byte): from "1" length " " :レコード内の固定バイト位置指定 レコードのfromバイト目から、length指定バイト長
Format :時刻のフォーマット
◎text "YYYY/MM/DD hh.mm.ss.000" :指定カラムのYYYY MM DD hh mm ss 000の位置から値を取得(エクセルの表示フォーマット: YYYY/MM/DD hh:mm:ss.000 に相当)
/ ◎(num)text / ○long :text:ユリウス日0:00との時差数値 テキスト数値/long(4バイト)数値(別途エンディアン指定)
Units of numbers: ○msec / ◎sec :(num)textもしくはlong選択時に、数値の単位をmsec/secから選択
[TAT or START/END judgment field] :処理時間(TAT)フィールド もしくは、開始/終了レコード判定フィールド の位置とフォーマットを指定
for TAT(turnaround time) condition :処理時間(TAT)フィールド の条件"2"th column of CSV:CSVのカラム位置を指定(デフォルト2カラム目、固定長レコードの場合1を指定)
Position(byte): from "1" length " ":固定バイト位置指定 指定カラムのfromバイト目から、length指定バイト長
for START/END judgment condition :開始/終了レコード判定フィールド の条件Units of numbers: ○msec / ◎sec :処理時間の単位 msec/secから選択
Format:◎(num)text / ○long :処理時間のフォーマット テキスト数値/long(4バイト)数値
for long Endian: ◎little / ○big :long指定時のエンディアンを選択 リトルエンディアン/ビッグエンディアン
START record: Matches:/"START"/:指定正規表現(デフォルト/START/)に合致するレコードを開始レコードとする
END record: Matches:/"END"/:指定正規表現(デフォルト/END/)に合致するレコードを終了レコードとする
[START-END pairing KEY field] :開始/終了レコードなど同一取引と判定するキーフィールドを指定
"3"th column of CSV :CSVのカラム位置を指定(デフォルト2カラム目、固定長レコードの場合1を指定)
Position(byte): from "1" length " " :固定バイト位置指定 指定カラムのfromバイト目から、length指定バイト長
&Position(Matches reg. exp.): :かつ、以下の正規表現に合致する文字列に間(空欄のときは先頭~末尾)、
between /" "/ and /" "/
&Adopt as KEY: Matches /"[0-9A-Z]+"/ :かつ、指定の正規表現に合致する文字列
ボタン
save format (.json) ボタン :メニュー指定項目を、JSON形式のファイルでダウンロードする
load format (.json) ボタン : JSON形式のファイルから、メニュー指定項目を読み込む
Menu-Filter
メニュー/Filterの操作方法 ↑
Sync ○Upper ○Detail ◎Async 指定:表示しているグラフの条件をフィルター条件に取り込む
Upperを選択したタイミングで上段グラフを取り込む/Detailを選択したタイミングで下段グラフ/Asyncを選択した際には何も変更しない
[Date filter] 指定機能
Include if end time is between "YYYY/MM/DD hh.mm.ss.000" and "YYYY/MM/DD hh.mm.ss.000" :
指定期間のデータのみを上段グラフの表示対象とする。時刻を手入力する作業は時間がかかるので Sync Upper/Detail で現在描画している情報を取り込んでから修正する操作を想定
[Turnaround time(TAT) filter] 指定機能:
Include if TAT is between "0①" and "数値②" :
処理時間(TAT)が①~②のデータのみを上段グラフの表示対象とする
[Text filter] 指定機能:
◎Don't use. ○Include ○Exclude
if "数値①" bytes from the "1②"th byte from head of the "3③"th column of CSV match the regular expression "④" :
テキストフィルターを使わない/正規表現に合致するデータを処理対象とする/正規表現に合致しないデータを処理対象とする
CSVレコードの、③番目のカラムの、先頭②バイト目から、①バイトの文字列を、正規表現④に照らして評価
Menu-Simulator
メニュー/Simulatorの操作方法 ↑
TAT log diver を起動すると、サンプルシミュレーションシナリオ1を初期表示する。
- Simulate ボタン:指定したシミュレーションシナリオを実行しグラフを表示する。
- JSON Editor(Open/Close) ボタン:シミュレーションシナリオ編集画面を開く/編集画面が開いている場合は閉じる。
- サンプルシナリオ選択機能 :サンプルシナリオを選択します。異なるシナリオを選択したタイミングでシミュレーション実行しグラフを再描画する。
Menu-View
メニュー/Viewの操作方法 ↑
上4つのチェックボックス(一部機能)で、上段全体グラフ上の表示有無を指定
下7つのチェックボックス(全機能)で、下段詳細グラフ上の表示有無を指定
多重度(詳細) :青 左Y軸 上段なし/下段☒
同時処理数(多重度)をヒストグラム形式で表示
多重度(区間最大)/sec :水色 左Y軸 上段☒/下段☒
1秒間の区間の多重度の最大値
上段グラフ:透過プロットで表示。同一多重度が連続するとプロットが重なり濃く見える
下段グラフ:ヒストグラム形式で表示。多重度(詳細)と重ねて表示すると秒間最大値との関係を把握できる
average tps / min (end) [line] :緑 左Y軸 上段☒/下段☒
1分間の平均tps。コンピュータの処理数は1分毎にとられることが多いため、突合しやすいように表示
response by start time [Y2軸:plot] :黄 右Y軸 上段なし/下段☒
X軸:処理開始時刻、Y軸(点の高さ)は処理時間
response by end time [Y2軸:plot] :茶 右Y軸 上段なし/下段☒
X軸:処理終了時刻、Y軸(点の高さ)は処理時間
max response / min (end) [Y2軸:line] :赤 右Y軸 上段☒/下段☒
1分間の最大レスポンス(処理終了時刻ベース)、ヒストグラム風折れ線で表示
average response / min (end) [Y2軸:line] :ピンク 右Y軸 上段☒/下段☐
1分間の平均レスポンス(処理終了時刻ベース)、ヒストグラム風折れ線で表示。コンピュータの処理数は1分毎にとられることが多いため、突合しやすいように表示機能を設けているがデフォルト非表示
Menu-Download
メニュー/Downloadの操作方法 ↑
- Upper graph image(.png) ボタン:上段グラフの図をpng形式で、初期ファイル名 graph.png でダウンロード。
- Upper graph data(.csv) ボタン:上段グラフに表示しているデータを、CSV形式で(改行コード、デリミタはFileメニューの指定値を適用)初期ファイル名 graph.csv でダウンロード。
- Upper graph log records(.csv) ボタン:上段グラフに表示しているデータの元データを、処理終了時刻順に、入力ファイルのレコードフォーマット(改行コード、デリミタ等も元ファイルのまま加工せずに適用)で、初期ファイル名 tatlog.csv でダウンロード。
- Detail graph image(.png) ボタン:下段グラフに対して上段と同じ処理。
- Detail graph data(.csv) ボタン:下段グラフに対して上段と同じ処理。
- Detail graph log records(.csv) ボタン:下段グラフに対して上段と同じ処理。
- Detail conc log records(.csv) ボタン:下段グラフに表示用に選択したCONC(同時処理数)時に処理しているデータを、処理終了時刻順に、入力ファイルのレコードフォーマットで、初期ファイル名 conclog.csv でダウンロード。(CONC指定時以外の場合はCONC最大値を基準)。
Menu-BottomDetailGraph
メニュー/Bottom detail graphの操作方法 ↑
下段詳細グラフの表示条件を指定する
Range: - "1①" + "2②" "10sec③" 指定機能:下段グラフの期間を指定する
「下段詳細グラフ表示条件」の基準時刻を③単位で切り捨てた時刻を基準に、-①数値×③単位 ~ +②数値×③単位 を下段グラフの表示データ抽出期間とする。③単位はsec/10sec/min/hour/6hour/day/year から選択
指定値を変更する都度、指定値を「下段詳細グラフ表示条件」に反映し下段グラフを再描画する。なお、グラフ上の範囲指定による表示期間変更は描画のみで「下段詳細グラフ表示条件」には反映されない。
「下段詳細グラフ表示条件」 アイコン :下段グラフに表示する条件を選択する機能(初期表示:同時処理数が最大となるタイミングを1つ)
上段/下段グラフの任意の点をクリックすると、「下段詳細グラフ表示条件」アイコン が追加される。アイコンは基準時刻順に縦に並ぶ。
下段グラフに表示している「下段詳細グラフ表示条件」アイコンは背景グレー。他のアイコンは背景白
アイコンにマウスをのせると、アイコンの左側にマイナス「-」アイコンが表示され、「-」をクリックすると該当「下段詳細グラフ表示条件」アイコンが削除される。
Menu-Help
メニュー/Helpの操作方法 ↑
- Usage of TAT log diver ボタン:"TAT log diver"の使用方法をサブウィンドウで表示
- about TAT log diver ボタン:"TAT log diver"のコピーライト、関連URLをダイアログで表示
Simulator
シミュレーションシナリオの仕様 ↑
Simulator-01
サンプル01(1 hour with table block.)の仕様 ↑
- 概要
数秒のバッチが、通常0.5秒以下の更新系オンのレスポンス遅延を起こす。更新系集中時に滞留増により遅延長時間化
online[100-500ms 2-5tps]:レスポンス100~500ミリ秒のオンライン取引を2~5tpsで発行。16:30~16:36に更新系オン2割増
batch[2-5sec evry3min]:処理時間2~5秒のオン中バッチ取引(DB更新あり)を3分毎に起動
- 詳細
{ "log" : 1,
エラーログのみ出力
log(任意、デフォルト3):詳細ログ出力指定(0:なし, 1:エラー時のみ, 2:+ETAT, 3:+push/pop, 4:+HOLD/FREE)
"start" : "2017/01/02 00:00:00.000", "end" : "17.0*h",
2017/01/02 00:00:00.000 を基準、最大17時間後までシミュレーション実行
シミュレーション開始時刻/終了時刻",
"resources" : [
システム構成定義: "type:リソース名、thread:最大同時hold数、timeout:holdタイムアウト時間"、q:最大hold待ち数、qWait:最大hold待ち時間"
{"type" :"WEB", "thread":1024,"timeout":"300*sec", "q":1280, "qWait":0},
WEBサーバ:1024スレッド、タイムアウトエラー:300秒、スレッド溢れ時:即時エラー
{"type" :"AP", "thread":20, "timeout":"300*sec", "q":1280, "qWait":0},
APサーバ:20スレッド、タイムアウトエラー:300秒、スレッド溢れ時:即時エラー
{"type" :"DB", "thread":10, "timeout": "10sec", "q":10, "qWait":"10sec"}
DBサーバ:10スレッド、SQL処理タイムアウトエラー:10秒、コネクションプール:10個、コネクション取得待ち:10秒でエラー
],
"models" : [
"models:clientsで指定するモデル名(model)の定義、以下modelsで指定できる項目",
"baseModel:複数リソースのsequenceをまとめて宣言できる、sequenceに展開した後処理される、任意指定",
"sequence:指定された順にリソースを取得する、配列内に複数指定可、sequenceも複数指定可",
"hold:リソース名、holds(baseModelのみ指定可):リソース一覧、各々にtat/tatMinが適用される",
"tat/tatMin:リソースの取得に要する平均/最小時間、tatMinのデフォルトはtat",
" ★注:tatはリソースの使用時間ではない、リソース使用時間を指定す場合はfreeで指定",
"数値はミリ秒単位、ms,sec,min,h,*day 指定可",
"times:繰返し回数",
"thinkTime/thinkTimeMin:繰返し時の間隔の平均/最小時間、thinkTimeMinのデフォルトはthinkTime",
"free:[リソース名の配列]、指定リソースを開放する、free指定の無いリソースはシーケンスの最後にfreeされる",
{ "ON-1" : { "times": 60, "thinkTimeMin":"3sec", "thinkTime": "10sec", "baseModel": {"holds": ["WEB","AP","DB"], "tatMin": "2ms", "tat":"5ms"}, "sequence": [ {"tatMin":30, "tat":50, "note":"select A"}, {"tatMin":50, "tat":50, "note":"updateB", "hold":"TBL_B"}, {"tatMin":80, "tat":100,"note":"updateC", "hold":"TBL_C"} ]}},
オンライン取引1(ON-1):1ユーザあたり3~10秒の取引を60回発行、Web-AP-DBの3層AP、各レイヤ呼出し時に2~5msの通信遅延あり、 処理内容 30~50ms 参照排他なしSQL > 50ms TBL_B排他SQL > 80~100ms TBL_C排他SQL(更新処理を想定)
{ "ON-2" : { "times": 60, "thinkTimeMin":"500ms", "thinkTime": "1sec", "baseModel": {"holds": ["WEB","AP","DB"], "tatMin": "2ms", "tat":"5ms"}, "sequence": [ {"tatMin":"100ms", "tat":"500ms", "hold":""} ]}},
オンライン取引2(ON-2):1ユーザあたり500ミリ秒~1秒の取引を60回発行、Web-AP-DBの3層AP、各レイヤ呼出し時に2~5msの通信遅延あり、 処理内容 100~500ms 排他なし(一覧参照処理を想定)
{ "BATCH-1" : { "baseModel": {"holds": ["DB"], "tatMin": "2ms", "tat":"5ms"}, "sequence": [ {"tatMin":"2sec","tat":"5sec","note":"updateB","hold":"TBL_B"} ]}}
バッチ取引2(BATCH-1):1ユーザあたり1ジョブ実行、DB更新のみ、各レイヤ呼出し時に2~5msの通信遅延あり、 処理内容 2~5秒 TBL_Bを排他(長時間トランザクションのオン中バッチを想定)
],
"clients" : [
"clients:仮想アプリケーションの起動クライアントの定義", "num:作成クライアント数、start~endの間で、ランダム(指数分布)に指定回数起動する", "start/end:仮想クライアント作成/終了時刻、先頭で宣言したstartからの相対時刻", "model:modelsで宣言したモデル名", "user:user+通番 のユーザ名で仮想クライアントが作成される",
{"num":100,"start":"16.0h", "end":"17.0h", "model":"ON-1", "user" :"userU", "message":"select A update B,C"},
16:00~17:00の 1時間に、userU00~userU99の100ユーザが、各々ON-1(更新系)を100回発行
{"num": 20,"start":"16.5h", "end":"16.6h", "model":"ON-1", "user" :"userT", "message":"select A update B,C 【増】"},
16:30~16:36 の6分間に、userT00~userT19の20ユーザが、各々ON-1(更新系)を20回発行(一時的に更新オン取引200%増)
{"num":100,"start":"16.0h", "end":"17.0h", "model":"ON-2", "user" :"userS", "message":"排他なし(WEBのみ)"},
16:00~17:00 の1時間に、userS00~userS99の100ユーザが、各々ON-2(参照系)を100回発行
{"num": 20,"start":"16.0h", "end":"17.0h", "model":"BATCH-1","user":"userB", "message":"バッチ処理 update B*****"}
16:00~17:00 に、userBが、BATCH-1(更新系)を20回発行
] }
Simulator-99
サンプル99(for test)の仕様 ↑
- 概要
デッドロックが発生し、タイムアウトで解消
デグレードテスト用シナリオを兼ねる(描画バリエーションの網羅率の高い短いシナリオ)
- 詳細
{ "log" : 1, "start" : "1970/01/02 00:00:00.000", "end" : "30.0*sec",
2017/01/02 00:00:00.000 を基準、最大30秒後までシミュレーション実行、エラーログのみ出力
"resources" : [ {"type" :"DB", "thread":2, "timeout": "5sec", "q":1, "qWait":"2sec"} ],
DBサーバ:2スレッド、DBトランザクションタイムアウトエラー:5秒、コネクションプール:1個、コネクション取得待ち:2秒でエラー
"models" : [ { "TEST-AB" : { "baseModel": {"holds": ["DB"], "tatMin": "2ms", "tat":"2ms"}, "sequence": [{"hold":"TBL_A", "tatMin":"1sec", "tat":"1sec"}], "sequence": [{"hold":"TBL_B", "tatMin":"3sec", "tat":"3sec"}], "times": 2, "thinkTimeMin":"1sec", "thinkTime": "1sec"}},
バッチ取引AB(TEST-AB):1ユーザあたり1秒毎に2回迄ジョブ起動、DB更新のみ、
処理内容 3.007秒処理(開始 > 1+2ms>DB排他>TBL_A排他 > 1+2ms+3秒>TBL_B排他 > 1ms>排他解放 > 1ms終了)+1秒+3.008秒処理
{ "TEST-BA" : { "baseModel": {"holds": ["DB"], "tatMin": "2ms", "tat":"2ms"}, "sequence": [{"hold":"TBL_B", "tatMin":"1sec", "tat":"1sec"}], "sequence": [{"hold":"TBL_A", "tatMin":"3sec", "tat":"3sec"}], "times": 2, "thinkTimeMin":"1sec", "thinkTime": "1sec"}} ],
バッチ取引BA(TEST-BA):1ユーザあたり1秒毎に2回迄ジョブ起動、DB更新のみ、
処理内容 3.007秒処理(開始 > 1+2ms>DB排他>TBL_B排他 > 1+2ms+3秒>TBL_A排他 > 1ms>排他解放 > 1ms終了)+1秒+3.008秒処理
"clients" : [
{"num": 1,"start":"0sec", "end":"0sec", "model":"TEST-AB","user" :"testAB1"},
1回目:0.001秒に、ユーザtestAB10が、TEST-AB起動(排他待ちなし、3.007秒で正常終了:N_000)
2回目:4.007秒に、ユーザtestAB10が、TEST-AB起動(DBコネクションキューオーバフロー、0.001秒で終了:E_QoF)
{"num": 1,"start":"1sec", "end":"1sec", "model":"TEST-AB","user" :"testAB2"},
1回目:1.000秒に、ユーザtestAB20が、TEST-AB起動(デッドロック DBトランザクションタイムアウト5.000秒でエラー終了:E_HTO)
2回目:7.000秒に、ユーザtestAB20が、TEST-AB起動(3.007秒で正常終了:N_000)
{"num": 1,"start":"3sec", "end":"3sec", "model":"TEST-BA","user" :"testBA3"},
1回目:3.000秒に、ユーザtestBA30が、TEST-BA起動(testAB10のDB解放待ち0.007秒を加えた、3.014秒で正常終了:N_000)
2回目:7.014秒に、ユーザtestBA30が、TEST-BA起動(5.005秒で正常終了:N_000)
{"num": 1,"start":"4sec", "end":"4sec", "model":"TEST-BA","user" :"testBA4"}
1回目:4.001秒に、ユーザtestBA40が、TEST-BA起動(5.014秒で正常終了:N_000)
2回目:3.000秒に、ユーザtestBA40が、TEST-BA起動(デッドロック DBトランザクションタイムアウト5.000秒でエラー終了:E_HTO)
] }
'; */