i/oを極めろ! for phper - newrelicを利用したパフォーマンス改善 -
TRANSCRIPT
![Page 1: I/Oを極めろ! for PHPer - NewRelicを利用したパフォーマンス改善 -](https://reader036.vdocuments.pub/reader036/viewer/2022082218/55d579d5bb61eb9f2f8b4695/html5/thumbnails/1.jpg)
I/Oを極めろ! for PHPer- NewRelicを利用したパフォーマンス改善 -
藤原 吉規
![Page 2: I/Oを極めろ! for PHPer - NewRelicを利用したパフォーマンス改善 -](https://reader036.vdocuments.pub/reader036/viewer/2022082218/55d579d5bb61eb9f2f8b4695/html5/thumbnails/2.jpg)
-自己紹介 -
ChatWork株式会社 藤原 吉規 技術部 サーバーエンジニア
ビジネスチャットツール「チャットワーク」を展開中
東京:18人
大阪:15人 USA:6人ルクセンブルクに子会社を設立
![Page 3: I/Oを極めろ! for PHPer - NewRelicを利用したパフォーマンス改善 -](https://reader036.vdocuments.pub/reader036/viewer/2022082218/55d579d5bb61eb9f2f8b4695/html5/thumbnails/3.jpg)
チャットワークのご紹介
クラウド型ビジネスチャットツールチャットの効率性・シンプルさをビジネスへ
+
ビデオ通話
チャット タスク管理in the cloud
![Page 4: I/Oを極めろ! for PHPer - NewRelicを利用したパフォーマンス改善 -](https://reader036.vdocuments.pub/reader036/viewer/2022082218/55d579d5bb61eb9f2f8b4695/html5/thumbnails/4.jpg)
導入ユーザー数46万ユーザー突破!
導入企業例:(2014年10月現在)
0
125000
250000
375000
500000
2011 6 9 12 2012 6 9 12 2013 6 9 12 2014 6 9
ユーザー数:
![Page 5: I/Oを極めろ! for PHPer - NewRelicを利用したパフォーマンス改善 -](https://reader036.vdocuments.pub/reader036/viewer/2022082218/55d579d5bb61eb9f2f8b4695/html5/thumbnails/5.jpg)
アジェンダ
•はじめに
• 現在のインフラ構成
• NewRelicについて
• 具体的なボトルネックと改善例
![Page 6: I/Oを極めろ! for PHPer - NewRelicを利用したパフォーマンス改善 -](https://reader036.vdocuments.pub/reader036/viewer/2022082218/55d579d5bb61eb9f2f8b4695/html5/thumbnails/6.jpg)
はじめに
• 2011年のサービス開始当初から、成長し続けるサービスを支えるための試行錯誤を実施
• 2013年からは、主にNewRelicを利用してサービスのボトルネックを計測しつつ改善
•今までボトルネックになった部分とのその改善方法をご紹介
![Page 7: I/Oを極めろ! for PHPer - NewRelicを利用したパフォーマンス改善 -](https://reader036.vdocuments.pub/reader036/viewer/2022082218/55d579d5bb61eb9f2f8b4695/html5/thumbnails/7.jpg)
現在のインフラ構成
![Page 8: I/Oを極めろ! for PHPer - NewRelicを利用したパフォーマンス改善 -](https://reader036.vdocuments.pub/reader036/viewer/2022082218/55d579d5bb61eb9f2f8b4695/html5/thumbnails/8.jpg)
![Page 9: I/Oを極めろ! for PHPer - NewRelicを利用したパフォーマンス改善 -](https://reader036.vdocuments.pub/reader036/viewer/2022082218/55d579d5bb61eb9f2f8b4695/html5/thumbnails/9.jpg)
NewRelicについて
![Page 10: I/Oを極めろ! for PHPer - NewRelicを利用したパフォーマンス改善 -](https://reader036.vdocuments.pub/reader036/viewer/2022082218/55d579d5bb61eb9f2f8b4695/html5/thumbnails/10.jpg)
NewRelicについて
•アプリケーション・インフラのパフォーマンス監視サービス(有料)
• 各言語用のAgentをサーバーにインストールして利用
• Pluginを利用すると、AWSの各サービスや外部サービスの監視も可能
![Page 11: I/Oを極めろ! for PHPer - NewRelicを利用したパフォーマンス改善 -](https://reader036.vdocuments.pub/reader036/viewer/2022082218/55d579d5bb61eb9f2f8b4695/html5/thumbnails/11.jpg)
改善サイクル
•NewRelicトレースログからボトルネック箇所の特定
• PHPのチャットコンサル等を利用して方針決定
• アプリケーション設計変更 or インフラスケールを決定
• NewRelicで改善確認
![Page 12: I/Oを極めろ! for PHPer - NewRelicを利用したパフォーマンス改善 -](https://reader036.vdocuments.pub/reader036/viewer/2022082218/55d579d5bb61eb9f2f8b4695/html5/thumbnails/12.jpg)
具体的なボトルネックと 改善例
![Page 13: I/Oを極めろ! for PHPer - NewRelicを利用したパフォーマンス改善 -](https://reader036.vdocuments.pub/reader036/viewer/2022082218/55d579d5bb61eb9f2f8b4695/html5/thumbnails/13.jpg)
Amazon S3 の問題
•チャットワークのファイル共有機能で利用
• Webサーバー経由のUpload/Downloadによるパフォーマンス低下
![Page 14: I/Oを極めろ! for PHPer - NewRelicを利用したパフォーマンス改善 -](https://reader036.vdocuments.pub/reader036/viewer/2022082218/55d579d5bb61eb9f2f8b4695/html5/thumbnails/14.jpg)
Amazon S3 の解決策
•Pre-Signed URLを利用したUpload/Downloadに変更
• http://qiita.com/inokappa/items/dc3ef8b564c7d1f63be2
![Page 15: I/Oを極めろ! for PHPer - NewRelicを利用したパフォーマンス改善 -](https://reader036.vdocuments.pub/reader036/viewer/2022082218/55d579d5bb61eb9f2f8b4695/html5/thumbnails/15.jpg)
Amazon EC2 の問題
•Elastic Block StorageのIO能力不足
• syslog
• php.ini、upload_tmp_dir(/tmp)
• TMPDIR(/tmp)
• putenv(‘TMPDIR=/tmp')
![Page 16: I/Oを極めろ! for PHPer - NewRelicを利用したパフォーマンス改善 -](https://reader036.vdocuments.pub/reader036/viewer/2022082218/55d579d5bb61eb9f2f8b4695/html5/thumbnails/16.jpg)
Amazon EC2 の解決策
•Ephemeral Diskの利用
![Page 17: I/Oを極めろ! for PHPer - NewRelicを利用したパフォーマンス改善 -](https://reader036.vdocuments.pub/reader036/viewer/2022082218/55d579d5bb61eb9f2f8b4695/html5/thumbnails/17.jpg)
memcached(ElastiCache)の問題
•大量のTIME_WAITとレスポンス低下
• ElastiCache側のCPU使用率の増大
![Page 18: I/Oを極めろ! for PHPer - NewRelicを利用したパフォーマンス改善 -](https://reader036.vdocuments.pub/reader036/viewer/2022082218/55d579d5bb61eb9f2f8b4695/html5/thumbnails/18.jpg)
memcached(ElastiCache)の解決策
•php-memcachedの持続的接続を利用
• ini_set('session.save_path','PERSISTENT=1 localhost:11211');
• http://qiita.com/shin1x1/items/092588ac9b4f610b40d6
![Page 19: I/Oを極めろ! for PHPer - NewRelicを利用したパフォーマンス改善 -](https://reader036.vdocuments.pub/reader036/viewer/2022082218/55d579d5bb61eb9f2f8b4695/html5/thumbnails/19.jpg)
MySQL(RDS)の問題
•マスタDBのCPU利用率増加
• デッドロック
• Replica遅延
![Page 20: I/Oを極めろ! for PHPer - NewRelicを利用したパフォーマンス改善 -](https://reader036.vdocuments.pub/reader036/viewer/2022082218/55d579d5bb61eb9f2f8b4695/html5/thumbnails/20.jpg)
MySQL(RDS)の解決策
•接続タイムアウトの適切な指定
• $mysqli->options(MYSQLI_OPT_CONNECT_TIMEOUT, 5)
• innodb_lock_wait_timeoutの指定
• $mysqli->query("SET innodb_lock_wait_timeout=5")
![Page 21: I/Oを極めろ! for PHPer - NewRelicを利用したパフォーマンス改善 -](https://reader036.vdocuments.pub/reader036/viewer/2022082218/55d579d5bb61eb9f2f8b4695/html5/thumbnails/21.jpg)
MySQL(RDS)の解決策
•持続的接続の利用
• $mysqli->real_connect('p:localhost', 'my_user', 'my_password', 'my_db')
• AutoCommit OFF
• $mysqli->autocommit(FALSE);
![Page 22: I/Oを極めろ! for PHPer - NewRelicを利用したパフォーマンス改善 -](https://reader036.vdocuments.pub/reader036/viewer/2022082218/55d579d5bb61eb9f2f8b4695/html5/thumbnails/22.jpg)
MySQL(RDS)の解決策
•mysqlnd.net_read_timeoutの指定
• http://jp1.php.net/manual/en/mysqlnd.config.php#ini.mysqlnd.net-read-timeout
![Page 23: I/Oを極めろ! for PHPer - NewRelicを利用したパフォーマンス改善 -](https://reader036.vdocuments.pub/reader036/viewer/2022082218/55d579d5bb61eb9f2f8b4695/html5/thumbnails/23.jpg)
Amazon SQS,DynamoDB の問題
•大量のTIME_WAITとレスポンス低下
• AWS SDK for PHPのパフォーマンスが出ない
![Page 24: I/Oを極めろ! for PHPer - NewRelicを利用したパフォーマンス改善 -](https://reader036.vdocuments.pub/reader036/viewer/2022082218/55d579d5bb61eb9f2f8b4695/html5/thumbnails/24.jpg)
Amazon SQS,DynamoDB の解決策
•カーネルパラメータ変更
• http://understeer.hatenablog.com/entry/2014/02/25/173810
!
/etc/sysctl.conf net.core.somaxconn = 10240 net.core.netdev_max_backlog = 10240 net.ipv4.tcp_max_syn_backlog = 10240 net.ipv4.tcp_max_syn_backlog = 10240 net.ipv4.tcp_tw_recycle = 1 net.ipv4.tcp_tw_reuse = 1 net.ipv4.ip_local_port_range = 1024 65535 net.ipv4.tcp_fin_timeout = 10
![Page 25: I/Oを極めろ! for PHPer - NewRelicを利用したパフォーマンス改善 -](https://reader036.vdocuments.pub/reader036/viewer/2022082218/55d579d5bb61eb9f2f8b4695/html5/thumbnails/25.jpg)
Amazon SQS,DynamoDB の解決策
•AWS SDK for PHP Performance Guide
• http://docs.aws.amazon.com/aws-sdk-php/guide/latest/performance.html
• Class Preloader for PHP
• https://github.com/mtdowling/ClassPreloader
![Page 26: I/Oを極めろ! for PHPer - NewRelicを利用したパフォーマンス改善 -](https://reader036.vdocuments.pub/reader036/viewer/2022082218/55d579d5bb61eb9f2f8b4695/html5/thumbnails/26.jpg)
そして、Scalaへ!
![Page 27: I/Oを極めろ! for PHPer - NewRelicを利用したパフォーマンス改善 -](https://reader036.vdocuments.pub/reader036/viewer/2022082218/55d579d5bb61eb9f2f8b4695/html5/thumbnails/27.jpg)
ありがとうございました!