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

@Konboi memo

主に技術に関してつらつらと。

ISUCON4 予選に参加して惨敗しました。

結果がでましたが、やはりダメでした。 反省を込めて、やったことをまとめておきます。

9/27 1日目に同期の@tkuchikiと先輩の@hilotterの2人とチーム 「流れ弾」として参加してきました。

事前準備

事前準備としては、マシン1台だからDBの負荷がかかる系だよねとか話しながら

前回同様 @tkuchiki がインフラ周り、自分と@hilotterがアプリ周りを中心にやってくことになりました。

そして、前回の教訓を活かして

の用意をしました。

当日

~ 10:00

会社の会議室に9:30 に集合して、ディスプレイや、電源タップなどを用意しながら当日の説明を読みながら、

銀行系の処理かね? などと言いながらベンチの方法等を確認

10:00 ~

  • インスタンスの起動
  • デプロイに使う公開鍵を置き、全員がサーバーに入れる状態に。
  • ソースコード、 /sql を用意していた GitHub のプライベートリポジトリへ
  • @tkuchikiがコミットしている間に2人でアプリをいじってみる
  • とりあえず触ってみて 初回ベンチを実行

tkuchiki: 初回ベンチ: success:6030 fail:0 score:1303

  • tkuchikiログからどこのアクセスが多くて、遅いのかを集計してもらう
  • init.sh で何やってるのか見ながらテーブル構造をチェック
  • tmuxのデフォルトの設定つかえないので自分の設定ファイルを了承を得て置く
Konboi: 最高の体験
  • ベンチかけてる間に top, dstat で見てた限り mysql のCPU負荷が高いのでそこを重点的に確認

  • この頃、自分は アクセスが捌けてくるようになると /report が 1分以内に捌けなくなってそこがポイントになるんじゃね?? ってテンション上がりながら言ってたけど、結果全然違った。

  • @tkuchikiに集計してもらってたlogを見てみると、 login とmypage が思いのでそこのコードを見てく

11:00 ~

  • @tkuchikiがnginxで静的ファイルを返すようにする*
  • 自分は user_locked を見て
  • @hilotterは rack-lineprof をlocalで動かしながらどこが重いのかを調査

nginxで静的ファイルを返すようにして

success:7180 fail:0 score:1551
  • この時自分はIFNULLのクエリ直したけどミスっててあまり進捗なし。

12:00 ~

  • select で使ってるカラムで index 貼ってないところに tkuchiki がインデックスをはる
success:65110 fail:0 score:14064
  • bench 1 だったので 2にしてやるがこけ始める
  • line-prof の結果

img

  • line-prof で重いところを hilotter が直し始める

13:00 ~

  • worker 2 にするとこけはじめる
  • session 周りのエラーだったので session を cookie から redis を使うように変更

14:00 ~

  • 原因不明のエラーがローカルポートの枯渇だと気付き tkuchiki が対応し始める
  • worker 2 でもこけなくなった。
  • last login のところを 毎回 redis に乗っけるようにしてみる

worker 2

success:98670 fail:0 score:21314

worker 4

success:116185 fail:1 score:25099

15:00 ~

  • ip ban、user lock のところを1回バンされたら復活しないって事に冷静になって気付きここをredisに載せるように自分が修正
  • 引き続き rack-lineprof で 遅いところを @hilotter が修正。
  • テンプレートのレンダリング部分で遅そうなところを合わせて @hilotter が修正

16:00 ~

  • この辺りからスコアが伸びず…
  • ベンチがネックになってたので如何に早くページを返したらいいか悩んでだ。
  • @tkuchikiにバンされたipがredisにあるので、それをnginx側で裁くようにお願いしました。

17:00 ~

残りあと1時間

  • 並行してアプリ側でも/login できた段階でredisからバンされたIPか、ブロックされたユーザーかをチェックして返すようにしようということで、編集中
  • @tkuchikiは引き続きluaのモジュールを製作中
  • 残り30分ごろに/login の実装は終わったんですが、ベンチが通らず..
  • 時間がないってことで戻して、logの出力をやめたり、最後の調整をしてベンチ書けてFinish
success:138120 fail:0 score:29839

まとめ

  • deploy周りは前回、前々回とくらべて段違いによかった @tkuchiki++
  • rack-lineprof++
  • やはりどこかの段階で、がっつり変更を入れる必要があった
  • が、その決断ができなかった。
  • 完全な実力不足...

最後に

運営の@941さん、出題者のクックパッドさん本当にお疲れ様です。 本当に楽しかったです ありがとうございました!! 本戦の準備も大変だと思いますが頑張ってください!!!