golang用のプロファイラ&アナライザを #isucon 対策で作って使った

シェアする

  • このエントリーをはてなブックマークに追加

こんにちは。どうもこんにちは。

先週末は #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:MP<TAB>exec XXX:250<TAB>exec YYY:1240<TAB>...<TAB>description:someHandler<TAB>memo:cache is valid
log:MP<TAB>exec XXX:800<TAB>exec YYY:3360<TAB>...<TAB>description:someHandler<TAB>memo:cache is invalid
log:MP<TAB>exec XXX:255<TAB>exec YYY:1140<TAB>...<TAB>description:someHandler<TAB>memo:cache is valid

ご活用ください。

ads

シェアする

  • このエントリーをはてなブックマークに追加

フォローする

ads