読者です 読者をやめる 読者になる 読者になる

ナチュラル @rch850

ナチュラル丼発祥の地、福井からお届けします。技術的な話題とか、雑談とか。

ISUCON5の予選抜けました

出よう出ようと思っていて、毎年気づいたら終わっていたISUCON。

ついにチーム「へしこず」として出ることができました。

そして……予選突破しました!やった!

isucon.net

開始前は Node.js でやろうとチームで話していたのですが、

心が Node.js を書きたがってるんだ……ということで、書けずに、Ruby で戦いました。Sinatra に mysql2-cs-bind なら俺達でも分かる!

※ラップトップが4台見えますが、ひとつは観戦者のものです。

※なんで心叫かってーと、ふくもく会その8〜心がもくもくしたがってるんだ〜の会場で参戦してたからです。

最初に素の状態でベンチマークとって、200点前後だということが分かり、そこからチューニング開始。開始から2時間半ぐらい、前回のスコアが800点ぐらいだったから、次は2000点ぐらい行くかなと思ったベンチマークで、突然の3000点超えで暫定トップに。

「あれ、3000点超えてる!?」

「えっ!?他のチームまだ2000点台だし、これってそういうこと?」

と、割と混乱気味なまま、本戦出場条件の「1日目,2日目でそれぞれ指定の点数に最も早く到達したチーム」を達成て本戦出場が決まりました。

やったことはというと、

  • 役割を分担して、こまめにお互いの進捗を共有
  • Chrome devtools でざっとサイトのパフォーマンスの様子見
  • nginx のログ出力項目増やしてベンチマーク走らせてボトルネックを見つける → GET / に的を絞る
  • インデックス効いてないクエリを見つけてインデックス張る
  • MySQL はスローログ取って mysqldumpslow で重いクエリを探す
  • ruby のコードでもログを取って重い処理を探す
  • nginx, unicorn, ruby でそれぞれチューニング

ざっとこんなところです。最終スコアは12616でしたが、そのほとんどが

  • インデックス
  • unicorn のプロセス増やす
  • ruby で処理していたところを SQL に書き換える

の3点で稼いだスコアだと思います。

あまり元の設計を変えないスタンスでチューニングしていたんですが、20000点などに伸ばしていくには、そもそもなところを書き換えていかないといけないんだろうなーと感じました。

本戦に行っても、島村卯月チームへしこず、頑張ります!

運良く今週末には今週末の福井技術者の集いがあるので、今回の予選の話とかをしようと思います。

fukuitech.connpass.com