ISUCON 2017 参加記録

@li_saku, @kyuridenamida, @akensho でluminousというチーム名で出ました。
最終的には 20位 203,319 luminous ぽいです。
参加記書かなさすぎて何を書いたら良いか忘れたので適当に書きます。

きゅうりの参加記→ ISUCON2017参加記 - kyuridenamidaのブログ

記憶に残っていること 時系列ばらばらかも
  • akensho さんが起動時に実行するスクリプトとか、解析用のツールとかを全部用意してくれてて、特に pprof とかめっちゃ便利でこれを元にボトルネック潰しまくれたので、サイコーだった。
  • kyuridenamida が ssh うまくいかなくて github 繋がらんとか言い出しては?って言いながらなんとか一緒にがんばっていた
  • ソース読む前にアプリケーション一通りさわってみて、この URL はこの挙動をするみたいなのを一通り把握した。
  • 画像がそのまま BINARY として DB にいれられていたから、やべーだろということでファイルに書き出すようにした。←ここ戦犯ポイント
    • この時点でファイルサイズを見るべきで、いろんなユーザの /profile を見ていたはずでアイコンなんかでかいなとは思ってたはずなのにサイズを見られてなかったから、もっとキャッシュについて調べることに気づくべきだった・・・;;
  • Nginx でキャッシュを効かせる方法を調べて、画像ファイルは静的を返すようにおまじない書いたらスコアが爆上がりした。
  • ベンチマークはかるページ?ポータル?で出てるメッセージを見るとなんか webfont とかがあるので、 MIME を調べて conf に追加したりする。
  • サーバ1台でやってたけど、 web1 サーバを Nginx 専用、 web2 サーバをアプリケーション専用にすることにしていい感じにしてもらう。
  • /fetch についてがんばったりしてたんだけど、よく考えるとスコア加算されないから、 /message とか /profile とか /login を見るべきだった、レギュレーション読み込みがあまりにも遅かった。
  • /fetch がスコア加算されないってレギュレーションに書いてあったのに無限にリクエスト飛んできてたから、参考実装に書いてあった sleep を復活させるとスコアが爆上がりした。ここで sleep ガチャもするべきだった。
  • ベンチマーク動かしてるときに Nginx 用で top -c を眺めて、 akensho さんが「このCPU使用率はスコア17万ぐらいやで」とか「これは徐々に下がってきてるからたぶん数万やで」とか言い出して、謎のスキルを会得していた。スコア予測マスタリ★
  • 最終的に、まったく同じアプリケーションを動かすのに reboot 前後でスコアが17万ぐらいの差が出るようになって、ガチャやんけとなり40分ほどチキってガチャを回さなくなって、20万ぐらいでやめてしまった。
  • sleep 入れるとスコア上がるのがわからなくて、その間別の処理出来るからじゃね?(適当)みたいなことを言いまくっていたんだけど、よくわからないままだった。
  • 最大の戦犯ポイントはここで、やめようって言い出したのはわたしで、最大スコアは 215,000 ぐらいだったので、もし回し続けていれば予選通過できていたはず。
  • くやしい;;
モチベーション
  • 本戦がある 11/25 は CODE FESTIVAL 2017 の開催日であって、 kyuridenamida と akensho さんは関係者のため出られない。
  • わたしは誕生日なので出られない。
  • よって、本戦通過してドヤ顔で「誕生日なので棄権します!!」って言いたかった
  • もう少しで言えた。・゚・(ノД`)・゚・。
おもしろ commit log

f:id:li_saku:20171025132243p:plain

  • そのに
  • これは sleep ガチャ回そうとしていたところかな

f:id:li_saku:20171025132310p:plain

おわりに

めっちゃ悔しくて、もっと web アプリケーションの速度についてとかインフラとか SQL 文とか解析についての能力があれば予選通過余裕で出来ていたかもしれないのに、後悔が多すぎてめっちゃ悲しい。
頼りっぱなしだったし、 N+1 問題も頭フル回転してる kyuridenamida に全部任せてしまったけど、分担できればもっと潰せたはず。
悔しいよーーーーーーーーーーーーーーーーーーーーー
でも楽しかったのでありがとうございました。開催&出題ありがとうございました。