Upload
yoshinori-fujiwara
View
401
Download
0
Embed Size (px)
Citation preview
I/Oを極めろ! for PHPer- NewRelicを利用したパフォーマンス改善 -
藤原 吉規
-自己紹介 -
ChatWork株式会社 藤原 吉規 技術部 サーバーエンジニア
ビジネスチャットツール「チャットワーク」を展開中
東京:18人
大阪:15人 USA:6人ルクセンブルクに子会社を設立
チャットワークのご紹介
クラウド型ビジネスチャットツールチャットの効率性・シンプルさをビジネスへ
+
ビデオ通話
チャット タスク管理in the cloud
導入ユーザー数46万ユーザー突破!
導入企業例:(2014年10月現在)
0
125000
250000
375000
500000
2011 6 9 12 2012 6 9 12 2013 6 9 12 2014 6 9
ユーザー数:
アジェンダ
•はじめに
• 現在のインフラ構成
• 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(‘TMPDIR=/tmp')
Amazon EC2 の解決策
•Ephemeral Diskの利用
memcached(ElastiCache)の問題
•大量のTIME_WAITとレスポンス低下
• ElastiCache側のCPU使用率の増大
memcached(ElastiCache)の解決策
•php-memcachedの持続的接続を利用
• ini_set('session.save_path','PERSISTENT=1 localhost:11211');
• http://qiita.com/shin1x1/items/092588ac9b4f610b40d6
MySQL(RDS)の問題
•マスタDBのCPU利用率増加
• デッドロック
• Replica遅延
MySQL(RDS)の解決策
•接続タイムアウトの適切な指定
• $mysqli->options(MYSQLI_OPT_CONNECT_TIMEOUT, 5)
• innodb_lock_wait_timeoutの指定
• $mysqli->query("SET innodb_lock_wait_timeout=5")
MySQL(RDS)の解決策
•持続的接続の利用
• $mysqli->real_connect('p:localhost', 'my_user', 'my_password', 'my_db')
• AutoCommit OFF
• $mysqli->autocommit(FALSE);
MySQL(RDS)の解決策
•mysqlnd.net_read_timeoutの指定
• http://jp1.php.net/manual/en/mysqlnd.config.php#ini.mysqlnd.net-read-timeout
Amazon SQS,DynamoDB の問題
•大量のTIME_WAITとレスポンス低下
• AWS SDK for PHPのパフォーマンスが出ない
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
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
そして、Scalaへ!
ありがとうございました!