一人isuconで遊んでみた

予選出れず泣いていたのですが、AMIが公開されたようなので遊んでみました。


以下条件。

  • 今日の0時-3時で集中してやる
  • マニュアルは事前に読んだ
  • isucon参加者ブログは意識して見ないようにしてた。けどなんとなくヒントっぽい単語は目に入ってた


なので、フェアではないです。

時系列にやったこと

  • AMIからインスタンス起動。
  • とりあえずwebappだけバックアップ。
  • アプリをperlに置き換え。
  • ベンチマーク流してアクセスログをダラ見。
  • 静的ファイルをnginx経由にした
  • engineをStarletにした
  • アプリをUNIXドメインソケットにした
  • too manyなんとかが出始めたので、ついでにsysctlの設定をしたり。
  • topで見ると、mysqlが断トツネックだったのでslowlogの設定やらDevel::KYTProfの設定入れた
  • kytprofの結果から遅いSQL見つけてインデックス貼ったりした
  • この辺りでスコア20000超えてた
  • MySQLの設定いじったりしたけど、何故か遅くなったりして結局元に戻したりした。
  • workloadの最適値を探したり。最終的には10にした。
  • どう考えてもlogin_logのinsert/select(特にinsert)が重いので、どうやってRedis化しようかなーとか考えてた
  • この辺りで停滞
  • ふとMySQLのメモリエンジンを思いつき、試してみたら30000近くになったw(・o・)w
  • アプリに手を入れるの時間的に無理っぽいので、ログを消したりソケットファイルをtmpfsに置いたり悪あがき

最終結果

まとめ

  • Devel::KYTProf最高〜(^q^
  • isucon超楽しい〜(^q^
  • やっとisucon参加者ブログが見れるぞい〜(^q^