ISUCON8
:money_with_wings: のチームでISUCON8に出てきました。 学生枠で出たかったけど、人望が無くてチームが組めなかったので、 出るのあきらめるかなー とおもっていたところ、 去年卒業した人たちに連れられて社会人枠で出場。 社会人枠では厳しいだろうなー と思っていたけど厳しかったですね。
結果は17000点ぐらい。
レポジトリはここ。
準備
今回は前日にmitamaeを準備していった。 → タグ 準備してたのに、前もってmitamaeを流してもらったりしていなかったのは普通によくなかったな という反省です。
前日にいくつかslack reminderを仕込んでいた。
事前に読んでいたmackerelの外形監視が便利というのを見てしかけたもの。
意外と手詰りじゃなかった。
再起動テストは大切。 普通にしてたらsystemdで問題無いはずだけどボケててenableしてなくて死 とかこわい……。
netdataはやっぱり便利。
本番
新社会人の残り二人は東京であつまって、私は京都の自宅でリモートという形でやっていた。 Slack call意外と行けますね。
9:45ぐらいに目覚めてギリギリ。
最初は公開鍵で入れるようにしたりnetdata入れたり(この2つはレシピ準備してた)、ruby実装に切り替えたり外形監視の設定をしたり、deployの設定をしたりであわただしくいつものをする感じ。 その間にアプリを眺めてもらったりしていた。
おちついて見てみるとh2oで動いていたので、一瞬でnginxに切り替える。
nginx用のレシピも仮なものは準備していたけれども、
入っていないことなんか無いとおもっていたので package 'nginx'
をあわてて追記して入れる。
ベンチマーカを流しながらnetdataを眺めていると、メモリが厳しく、死ぬほどswapしたりして厳しい感じだった(これ、結局leakがあった感じなんですか……?)。 その時ぐらいにunicornにpumaから変更してるんだけれど、なんでメモリが厳しいのに変えたのだっけ……?
とりあえずメモリが厳しかったので、DBを3のインスタンスに移したり、static fileはnginxで返すような設定を入れる。
遅いリクエストは、nginxのapptimeで見ていたけれども、メモリがswapして遅いものとの区別が付きづらいのが少しつらかった。
dbを3にして1と2でappを動かしたら、initializeがデフォルトだとlocalでしか走らないので、鈴木 明さんのconflictが発生するので、
雑に3でinitするようにしたが、
終了後の打ち上げでinit.shの中で -h
で済むと言われて「たしかに……」となっていた。
apptimeを相変わらず眺めたり、ベンチマーカのvalidationを眺めたりすると /admin/
が遅いなということに気づいたので(13:52ごろ)、
そのへんになってやっと私もコードを眺めて3重のN+1ということに気づき直してもらう。
手づまりじゃなかった。
そこを改善することで7000点ぐらい? まで上がった。
/admin/api/reports/events/11/sales
のdead lockは発生するなとは気づいていたが、
確率的にしか発生しなかったのでとりあえず後回しとされたところ、そのまま終了した。
その後しばらくはあまりぱっとする変更は入れられなかったが、 謎のtransactionを消したら一気に14000ぐらい? まで上がったように思う。 結局このtransactionだけは「自然に書くとこうはならんやろ」という感じがして、 なんで囲まれていたのかよくわからなった(実は深淵な理由がある?)。
あとはDBのレイテンシがでかい? からか、DBクエリの削減(これとこれ)でちょっと上がった気がする?
適当にexplainしてそれっぽくalter tableをする(ぜんぜんDBについての知見を持っていない)などの活動をして、終了して結果17000点で終了 (「次でラストにするか」と言って回したのが死ぬほどswapして4000点台を出したので、あわててappをrestartして回しなおして17:59:26にこの点数が無事出るなどのドキドキがあったりしたなどはあったが)。
今回は急造チームということもあり、けっこう全体を見るなどして大変だった。 「私ができそうなところはだいたいやったなー」という感じにはなってこの点数だったので、 「普通の学生ぐらいの筋力かー」というきもちになったので、 もっとやっていく必要がありますね……。 とりあえず各位のwrite upを読んでやっていきましょう……。
来年も多分学生なので(そろそろ卒業したい)、 次こそはまた本戦に行きたいですね……(社会人枠で勝てるぐらい強くなりましょう(むずかしそう……))。