カメログスマートフォン用の表示で見るカメログ2015-09-28ISUCON5予選でスコア19450出しましたサーバチューニングの勉強になればとISUCON5の予選に参加してみたところ、予想外に予選通過できてしまいました。ISUCON参加してみての感想を一言で言うと、めちゃくちゃ疲れるけど楽しかったです。参考までに、僕が行った作業内容を書いてみます。ベンチマークの実行を成功させるまずベンチマークを実行できるところまで持っていきます。ここまではなんとかがんばるしかないですね。nginx,unicornの設定チューニングする前回参加者のブログを参考に、あらかじめ準備していたチートシート通りに設定しました。systemdの使い方がわからなくてサービスを再起動方法をググったりして、わりと手間がかかりました。設定内容は以下のとおり。ltsv;unicornプロセス数を5にプロセス数はあとで増やすなど試してみたんですが、効果がなかったので5に戻しました。ログ解析をするために、ltsv形式で出力しようというのは事前に決めてました。ここまでである程度スコアが上がったのを確認して、次に戦略を立てるためにログ解析の準備をしました。ログ解析の準備をしてログ解析するsonotsさんが前回のISUCONでltsvのログをスクリプトで整形しと書いてたので、このアイデアをそのまま使わせてもらいました。https://gist.github.com/sonots/9ae0167d31d7f4b42c9a実際の作業ではボトルネックになってる箇所を見やすいように、URLをグループごとに見れるように、スクリプトを調整しました。あとはアクセスログを退避してクリアするスクリプトも作っておきました。これでベンチマークを動かすごとに、詳細なログ解析が得られるようになりました。アクセスの処理にほとんどの時間がかかってて、静的ファイルへのアクセスはほとんど影響してないことがわかりました。今回の問題は、静的ファイルを素早くさばくことよりアプリケーションの処理を高速化するのが効果的だろうと判断しました。このログ解析の仕組みは最後までチューニング方針の決定に役立ってくれたので、準備しておいたかいがありました。アプリケーションのチューニング内容アプリケーションのチューニングでやったことは、とくに大きな構成の変更はせず、参考実装のボトルネックを潰していった感じです。N+1問題を潰したり、mysqlのindexを追加して行ったりしたら順調にスコアが上がっていってくれました。今回の課題はアプリケーションのボトルネックを潰すのがメインだったので、アプリケーションエンジニアの自分にとっては普段やってる仕事と同じような感じで作業していけました。反省点shellやエディタが普段の環境とちがうまま作業してしまって非効率でした。dotfileをgithubに置いておいて適用したほうがよかった。N+1問題が起こってるところをgrepで見つけていたのが良くなかったので、N+1問題を検出する仕組みを準備しておくべきだった。kazeburoの術によるとnginx設定はまだ足りないものがある感じ。)本選までに勉強しておこう。stat.rbは役に立った。実行結果を分析できるので、効率的にボトルネックに対処できた。nginxのチートシートは役に立った予習したおかげで、設定ファイルの場所などで戸惑わずにすんだ。作業ごとのスコアの遷移を掲載しておきます。だいたいアプリケーションの修正とindexの追加に時間を使っていて、順調にスコアが上げれてましたね。91113:12vimrcをいつも使ってるサーバからコピペ。vimプラグインは面倒なので持ってこなかった。482815:43comment取得をsqlだけで取得するように。見た目には正しく変換できてるように見えるがbenchmarkerでエラーになるので中止。月別アーカイブ参加グループWindows開発者はてなブログをはじめよう!kmdsbngさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。