ISUCON3にPHPerが参加した

今回会社の同期と先輩でISUCON3に参加してきました

ISUCONって何??

 

ISUCONとは【Iikanjini Speed Up Contest】の頭文字を取ったもので, お題となるWebアプリケーションをあらゆる手を使って最速化するコンテストです

サーバの設定, ミドルウェア, プログラムとWebアプリに関するあらゆるものをいじりまくります

 

私は【チームたこやき】という名前で出場しましたが, なんとか2日目チーム3位&全体9位の成績をおさめました(※暫定

(ISUCONは後で運営が実際にテストして得点と乖離が無いかチェックされるため暫定という表現をしています)

なにはともあれ良かったよかったということで, 個人的にやってみて思ったことをいかにつらつらと

  • xhprof便利
    • 今回一番助けられたミドルウェア
    • 俺達のFacebookが開発
    • アプリの何がボトルネックになっているかグラフでわかっちゃう
    • フレームワークと組み合わせるときはちょっとだけ面倒
    • 本来ならApacheのアクセスログの"%D"を見て当たりをつけて分析ってかんじですね
  • memcachedのポート番号って
    • ini_set()でmemcachedの設定がされていたが上のxhprofからsession_startがボトルネックになってた
    • Sessionをmemcached => fileに変更したらちょっと幸せになった
    • Memcacheがポート11211で起動してたけど, これはMySQL 5.6.14のInnoDB Memcached Pluginだったらしい!!(全く気づかなかった)
    • Apache, MySQL, Memcacheが1台だからMemcacheを使わなくても良かった
  • MySQLのQuery Cacheが効かない?
    • query_cache_sizeを設定したけどそんなにヒットしない
    • 先輩も悩んでたけど結局良くわからなかった
  • Slow Queryは出力しよう
    • SQLがボトルネックになっているときはどのSQLがダメか探そう
    • my.cnfにこんなかんじで書きます
      [mysqld]
      slow_query_log=ON
      slow_query_log_file=mysql-slow.log
      long_query_time=0
    • for文で回されるSQL => INNER JOIN => STRAIGHT_JOINと改良させることが出来ました
  • PHP-APCやばい
    • PHP-APCとはAPC(Alternative PHP Cache)と呼ばれ、PHPの中間コードをメモリにキャッシュし、次回アクセス時に高速化ををするモジュールです
    • 【yum install php-pecl-apc】 これだけでいい
    • なんかめっちゃポイント上がった気がした

次にやりたいこと

  • PHP Quick Profilerを使う
    • メモリの使用量も出してくれる
    • xhprofと組み合わせたい
  • FastCGI
    • php-fpmはインストールしたけど結果使ってなかった
    • mod_fcgiも入れてたので使えばよかった
  • Memcache vs Redis vs File
    • Redisの発想はなかった
    • Memcache or FileじゃなくてRedisも考えてみれば良かった
  • access_logの有効活用
  • そろそろPerlをちゃんと勉強しようかな