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

I/Oを極めろ! for PHPer - NewRelicを利用したパフォーマンス改善 -

1,059 views

Published on

合同勉強会資料

Published in: Technology

I/Oを極めろ! for PHPer - NewRelicを利用したパフォーマンス改善 -

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

×