Upgrade to Pro — share decks privately, control downloads, hide ads and more …

実践!PHPWebアプリケーション パフォーマンスチューニング/Practice_PHP_Web_Application_Performance_Tuning

実践!PHPWebアプリケーション パフォーマンスチューニング/Practice_PHP_Web_Application_Performance_Tuning

速いは正義、アプリケーションは速くあるべきです

話者はPHPerKaigi2021にてパフォーマンスチューニングに関する登壇を行いました
https://speakerdeck.com/seike460/php-web-application-performance-tuning

時間の関係上、理論のみのお話となってしまったのですが、今回は加えて実践結果に触れていきます。
そこで説明した理論を実際に適用すると、どのようにパフォーマンスが向上していくかを
例題のPHPアプリケーションに対して計測を行い、原因を特定して、改善した実際の様子と合わせてお伝えします

shiro seike

May 29, 2021
Tweet

More Decks by shiro seike

Other Decks in Programming

Transcript

  1. 自己紹介
 清家 史郎
 @seike460
 - ID
 - GitHub:seike460 
 -

    Twitter:@seike460 
 - Work at
 - 株式会社 Fusic (フュージック) 
 技術開発本部/技術開発第一部門 
 - チームリーダー/エバンジェリスト/プリンシパルエンジニア 
 - Skill
 - PHP/Go/AWS 
 - Personal
 - PHPカンファレンス福岡2020 幻の実行委員長 
 - Fukuoka.php Organizer 
 - 琉球大学工学部 電気電子工学科卒 
 3

  2. Xdebug x Webgrind
 26
 Xdebugにてプロファイルを取得して 
 プロファイル解析が可能なWebgrindを利用し、Graphvizを介して可視化します。 
 具体的な利用方法はFusic Tech

    Blogをご参照ください。 
 PHP8のプロファイリングにXdebug3とWebgrindを使う 
 
 右図の用に図が生成出来ます。 
 - どの関数から呼び出されているか 
 - 処理を専有している関数
 - 繰り返し実行されている回数
 N+1問題等を発見して解消していきます 

  3. MySQLパラメータチューニング
 41
 パラメータチューニングに関しては、 
 次の記事とスライドが非常に参考になりますのでご参考にしてください。 
 ◎僕が心の拠り所にしているQiita MySQLパフォーマンスチューニング -my.cnfの見直し- 


    ◎@mamy1326 さん作成の元ネタ
 初めてのMySQLサーバーチューニング -データベースは怖くない!- 
 
 こちらの記事を参考に、次ページの様にMySQLのパラメーターを追加します。 

  4. # cd /usr/local/src # wget https://www.php.net/distributions/php-8.0.6.tar.gz # tar zxf php-8.0.6.tar.gz

    # cd php-8.0.6 # ./configure --enable-fpm --with-mysqli --enable-mbstring --with-pdo-mysql=mysqlnd # make -j2 # make install Installing shared extensions: /usr/local/lib/php/extensions/no-debug-non-zts-20200930/ Installing PHP CLI binary: /usr/local/bin/ Installing PHP CLI man page: /usr/local/php/man/man1/ Installing PHP FPM binary: /usr/local/sbin/ Installing PHP FPM defconfig: /usr/local/etc/ Installing PHP FPM man page: /usr/local/php/man/man8/ Installing PHP FPM status page: /usr/local/php/php/fpm/ ~省略〜 Installing PDO headers: /usr/local/include/php/ext/pdo/ # php -v PHP 8.0.6 (cli) (built: May 29 2021 06:49:02) ( NTS ) Copyright (c) The PHP Group Zend Engine v4.0.6, Copyright (c) Zend Technologies OPCahceが読み込まれてないので読み込ませる PHP8のインストール
 47

  5. # php -i | grep ini Configuration File (php.ini) Path

    => /usr/local/lib # vim /usr/local/lib/php.ini OPcacheの有効化
 48
 # php -v PHP 8.0.6 (cli) (built: May 29 2021 06:49:02) ( NTS ) Copyright (c) The PHP Group Zend Engine v4.0.6, Copyright (c) Zend Technologies with Zend OPcache v8.0.6, Copyright (c), by Zend Technologies
  6. # vim /etc/systemd/system/isuxi.php.service PHP-FPMの入れ替え
 49
 # systemctl restart isuxi.php.service Warning:

    isuxi.php.service changed on disk. Run 'systemctl daemon-reload' to reload units. # systemctl daemon-reload # systemctl restart isuxi.php.service
  7. # cd /usr/local/src # wget https://xdebug.org/files/xdebug-3.0.4.tgz # tar zxf xdebug-3.0.4.tgz

    # cd xdebug-3.0.4 # phpize # ./configure --enable-xdebug # make -j2 # make install ~ 省略 ~ | NOTE: Please disregard the message | You should add "extension=xdebug.so" to php.ini | that is emitted by the PECL installer. This does not work for | Xdebug. | +----------------------------------------------------------------------+ Xdebugのインストール
 54

  8. プロファイリング用ベンチマーク
 55
 スコアが「5497.8」→「3322.2」 
 
 プロファイリング情報を収集しながら動作するのと、 
 100k 〜 1Mサイズのプロファイリングファイルの

    
 書き出しを行うので動作としてはかなり影響が出ます 
 
 運用時はXdebugを切ることを忘れないように 
 気をつける必要があります。 

  9. ▪描画用ツール # apt-get install graphviz ▪webgrind # cd /usr/local/src #

    git clone https://github.com/jokkedk/webgrind.git # php -S 0.0.0.0:8080 index.php PHP 8.0.6 Development Server (http://0.0.0.0:8080) started webgrindの設定
 56

  10. Nginxパラメータチューニング
 59
 Webサーバーはいかにリクエストを受け付けるのかが鍵 
 ※メモリの消費に直結するのでサーバーリソースと相談しながら 
 - worker_processes
 - 受け付けるNginxのプロセス数を決める。auto

    = CPU数がオススメ 
 - worker_connections 
 - ひとつのワーカーが開けるConnection数 
 - worker_rlimit_nofile 
 - 開けるファイルディスクリプタの上限値 
 - Unix ドメインソケット 
 - Unixドメインソケットを利用する事で接続時のオーバーヘッドを減らす 

  11. まとめ
 Point 3
 ボトルネックを解消する方法は様々な方法があります。知識を蓄え適切に対処しましょう。 
 65
 推測するな、計測せよ。再現性のある対策を行いましょう。
 Point 1
 Point

    4
 ISUCON11はそろそろ申し込みです!みなさん、高速化やっていきましょう! 
 
 リソースを正しく把握して、ボトルネックを特定しましょう。
 Point 2