Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

PHPカンファレンス2014の懇親会飛び込みLT資料

2,813 views

Published on

PHPカンファレンス2014の懇親会飛び込みLTの時に慌ててつくった資料です。

Published in: Software
  • Be the first to comment

PHPカンファレンス2014の懇親会飛び込みLT資料

  1. 1. ISUCONで予選落ちした話 (HHVM対応) uzulla
  2. 2. このスライドはPHP Conference 2014の懇親会での飛び込みLT での発表資料です。 飛び込みLTがあるのしらなかったので、10分くらいでつくった 資料ですので、雑な所や間違いがあったらすみません。 一部が当日と変わっておりますが、ご了承下さい。
  3. 3. YAPC::Asia 2014 • 自己紹介ですが、 • Perlのカンファレンス • PHPの話をしてベストトーク賞をとりました! • でもPHPerです!
  4. 4. I ❤️ PHP
  5. 5. ISUCON? • iikanjini speedup contest. • http://isucon.net/ • お題のアプリを高速化する • AWSのm3.xlargeでうごけば何でもあり (予選は1台、本戦は3台(去年)) • 8時間で全部やりきるスプリントレース
  6. 6. 出場しました • 若者二人と私 • PHP(HHVMで) • 予選落ちしました… • 最終スコアは37500 • (足切りスコアは38000… • こんな男の話です
  7. 7. 予選突破したdekokun さん!!!たのみました ぞ!!!
  8. 8. とはいえ • あとちょっとで本戦だったので、その話をします • HHVMだし
  9. 9. トピック • PHP • HHVM + nginx • memcached • xhprof • param tune • phpstorm
  10. 10. HHVMを用意する • AmazonLinux • コードからビルドすると 3時間くらいかかってつらい • 「Cent系にYumほしい」「そんなものはない」 • 「3rdパーティーならあるぞ」>古い
  11. 11. PHPをHHVMで動くように修正する • サンプル実装はLimonadeで実装されていた • static $message = nullとかを消した • (globalとか希にあるので修正する • (session_start()を消すなど
  12. 12. HHVMの調整 • config.hdf(一部抜粋) Server { Type = fastcgi ThreadCount = 10 FileSocket = /tmp/hhvm.sock RequestTimeoutSeconds = 60 DnsCache { Enable = true TTL = 600 # in seconds } }
  13. 13. but ... • config.hdf is depricated ( Pail said. ) (今さっき聞きました)
  14. 14. • いまならphp.iniでいける(らしい) • UNIX domain socket • ポート枯渇対策として • hhvm.server.gzip_compression_level = 0 • gzip をオフに(nginx のssiを使いたいので) • 「正しくオフにする方法がわからん」
  15. 15. nginx の調整 worker_processes 8; worker_rlimit_nofile 100000; http{ keepalive_timeout 120; gzip off; } • gzip はlocalhostから叩くベンチでは不要 • (ログ系は全部コメントアウト(誤差に近い…)
  16. 16. mysqlにindexを張る • 省略!!! • 効果大 • PHPの勉強よりMysqlの勉強をした方が性能がでますよ
  17. 17. mysqlはちゃんと永続接続を使う • PDO::ATTR_PERSISTENT => true • 'mysql:host=...;dbname=hoge;charset=utf8' • charset指定にいまだにset names utf8は無い
  18. 18. xhprofで見当をつける • HHVMには最初から入ってる最高
  19. 19. +function __xhprof_save() { + $data = xhprof_disable(); + $runs = new XHProfRuns_Default(); + $run_id = $runs->save_run($data, 'bank'); + echo "<a href="http://***.***.***.***/ xhprof/xhprof_html/index.php? run={$run_id}&source=bank">xhprof Result</a>n"; +} + +register_shutdown_function('__xhprof_save'); + +xhprof_enable();
  20. 20. memcached でキャッシュ • 普通にmemcached(拡張)はHHVMにはいってて便利 • 特に考える事なし • Memcache::pconnect() • (ただし、十分に速いMysqlは十分に速い)
  21. 21. HHVMのmemcachedの罠 • セッションに使えない • 自分でセッションハンドラ書く事に • 雑なサンプル https://github.com/uzulla/php_memcache
  22. 22. apc関数 • memcachedなくてもある程度いけるよね • HHVMには最初からはいってる、便利! • でも、使い込んだ事は無いです
  23. 23. パラメタチューニング net.core.somaxconn=65535 net.ipv4.tcp_tw_recycle = 1 net.ipv4.tcp_tw_reuse = 1 net.ipv4.tcp_fin_timeout = 30 ポート枯渇しますからね
  24. 24. 闇のパラメタチューニング vm.dirty_background_ratio=10 vm.dirty_ratio=30 vm.dirty_expire_centisecs=200000 vm.dirty_writeback_centisecs=50000 ※そんなに効果はないぞ!
  25. 25. Mysqlパラメタチューニング innodb_write_io_threads = 16 innodb_read_io_threads = 16 innodb_thread_concurrency = 32 max_allowed_packet=300M
  26. 26. 闇のMysqlパラメタチューニング innodb_flush_log_at_trx_commit = 0 innodb_flush_method=nosync ※そんなに効果はないぞ!
  27. 27. PHPStorm便利 • めっちゃ急いで書いてる場合、 • PHPStormがSyntaxErrorをバンバンあげてくれるので便利 • これはかなり重要(ハマらないで済むんだよ!) • 本番サーバーのコードを直接操作もできる(sftp)
  28. 28. daemon化について • supervisord • あるいはinit.d (今回こちらを採用
  29. 29. 結果として • 私はダメでしたが、PHPで突破した人結構いる • 6 / 23チーム • PHP結構イケてるぞ? • (実際の所言語だけではない世界)
  30. 30. まとめ • HHVMは最初から色々エクステンションはいっていて便利 • ただ、まだzmq(zeromq)とか、足りないものもちらほら • PHPだから勝てないという事はない • VarnishとMysql(SQL)の知見があれば勝てる…かもしれな い
  31. 31. PHPの人も、もっとスピード求めまし ょう! • PHPの高速化の知見はあまり共有されていないような気が… • 秘伝のタレとかを公開しましょう! • 是非!! • 他の言語にまけないようにがんばるぞい!
  32. 32. 何故か? • 最初PHPは初期実装漏れしていた • 「PHPは遅い(勝てない」という間違った(?)イメージ • 「その幻想をぶちこわす!」 • 頑張るぞー(今回予選落ちだけど)
  33. 33. • ところでreactPHP速くて面白いんですけど • だれか好きな人いますか?? • 友達になってください!! • twitter:uzulla • ご静聴ありがとうございました!!!

×