こんにちは。どうもこんにちは。
先週末は #isucon で惨敗した わけなんですけども、手ぶらで望んだわけではなくてかなり準備とか練習してました。
今回は golang + redis の練習をしててそれはズバリあたったわけで、練習の中で kagenui というプロファイラ&アナライザを作ったので公開しました。 isuconをかなり意識した機能がついてます。
netmarkjp/kagenui - https://github.com/netmarkjp/kagenui
大きな特徴は2つ。
- 集計できる( @matsuuさん作)
- 通ったパスのメモが書ける
集計できる
ひとしきり記録した後に集計関数を呼ぶと、以下の様なかんじで集計結果が取得できます。
Sort by Count
Count Total Mean Stddev Min Max Description
100 24286 242 22.909 197 350 someHandler/Last Step to End
100 144162 1441 1669.445 631 16671 someHandler/exec XXX
50 257665 5153 27030.228 952 194161 someHandler/exec YYY
Sort by Total
Count Total Mean Stddev Min Max Description
50 257665 5153 27030.228 952 194161 someHandler/exec XXX
100 144162 1441 1669.445 631 16671 someHandler/exec YYY
100 24286 242 22.909 197 350 someHandler/Last Step to End
Sort by Mean
Count Total Mean Stddev Min Max Description
50 257665 5153 27030.228 952 194161 someHandler/exec YYY
100 144162 1441 1669.445 631 16671 someHandler/exec XXX
100 24286 242 22.909 197 350 someHandler/Last Step to End
Sort by Standard Deviation
Count Total Mean Stddev Min Max Description
50 257665 5153 27030.228 952 194161 someHandler/exec YYY
100 144162 1441 1669.445 631 16671 someHandler/exec XXX
100 24286 242 22.909 197 350 someHandler/Last Step to End
Sort by Maximum(100 Percentile)
Count Total Mean Stddev Min Max Description
50 257665 5153 27030.228 952 194161 someHandler/exec YYY
100 144162 1441 1669.445 631 16671 someHandler/exec XXX
100 24286 242 22.909 197 350 someHandler/Last Step to End
通ったパスのメモが書ける
こんな感じで、その時に通ったパスとか状態をメモで記録できます。
func SomeHandler(){
mp := kagenui.Begin("someHandler")
defer mp.End()
...
mp.Step("exec XXX")
...
if valid {
mp.AddMemo("cache is valid")
...
} else {
mp.AddMemo("cache is invalid")
...
}
...
mp.Step("exec YYY")
}
集計機能であたりをつけたあと、なにがどうなったとき遅いんだろうか?とか確認するときに効果的!
メモは,区切りで追記されていくのでバンバン入れていけばokです。
log:MPexec XXX:250exec YYY:1240...description:someHandlermemo:cache is valid
log:MPexec XXX:800exec YYY:3360...description:someHandlermemo:cache is invalid
log:MPexec XXX:255exec YYY:1140...description:someHandlermemo:cache is valid
ご活用ください。