i/oを極めろ! for phper - newrelicを利用したパフォーマンス改善 -

Post on 20-Aug-2015

401 Views

Category:

Technology

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

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へ!

ありがとうございました!

top related