pixiv社内ISUCON

(2016/09/04〜2016/09/05)
  • pixivで開催された社内ISUCON

  • リポジトリ
  • やってみた(sota1235)

  • 某若手エンジニアコミュニティでわいわい楽しくやった
  • 作業ログ
  • 結果
  • 緑がうちのチームで圧勝に見えるけど突き抜けたのは競技終了後
  • 調査したこと
  • alpを使ってアクセス解析
  • /にアクセスが多いこととかがわかった
  • POST /loginも多い?
  • ページャがボトルネックなのも判明
  • そもそもphp7だった
  • スロークエリーの出力
  • 後述するが、基準を0.1sにしてたのでよくなかった
  • やったこと
  • nginxによる静的ファイル配信
  • css, js, imgフォルダだけ
  • DBに入ってた画像ファイルの吐き出し
  • 一回アクセスのあったものはpublic/imageから返すようになってる
  • コード
  • N+1の解消
  • ループする必要のないものは徹底排除
  • make_posts() 🙅
  • キャッシュ
  • redis + Predisを使用 コード
  • SELECT COUNT(*) FROM hoge系はアプリ立ち上げ時に全部キャッシュした
  • コメントのカウント数
  • nginx, mysqlの設定周りはすることなかった
  • というか何もできなかった…
  • 適当にインデック貼った
  • 貼ったのは競技終了後の他チームの作戦聞いてから
  • スコアが跳ね上がってワロタ
  • posts
  • users
  • comments
  • PHPのrequireを極力減らす
  • viewとかベタ書き
  • あまり効果なし
  • 環境変数読み込みをベタ書き
  • あまり効果なし
  • 不要なクエリ削除
  • ちょっと早くなった
  • 不要なカラムをSELECTしない
  • インデックスが効かなくなることがある
  • *は基本改善すべし
  • php-fpmの子プロセス上限あげた
  • メモリ消費量は増えたけどスコア下がったので戻した
  • スコアあがった後ならもうちょっと変わったかも
  • 終盤やったこと
  • OPcacheの有効化
  • あまり効果なし
  • ログ出力停止
  • nginx, mysql
  • 雀の涙あがる
  • 反省
  • プロファイリングできなかった
  • xhprofの導入に手間取ってやらなかった
  • php7との相性が悪そうなので事前に一度ビルドして練習したほうがよさげ
  • 大幅にスコアが上がらないと細かい修正の良し悪しがわからない
  • スコアが悪いとそもそもリクエスト数が少ないので誤差なのか改善なのか判別できない
  • スロークエリーは全部出すべし
  • スロークエリーの判定秒数を0にして発行回数の割合とか見たほうがいい
  • 判定秒数を0に→ベンチ叩く→判定秒数を10にってするとよいらしい
  • 一回のベンチでどんなクエリがどれくらい叩かれてるか分かる
  • 事前準備大事
  • general::sshrc用意しておこう