一人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^