ホームページ >バックエンド開発 >PHPチュートリアル >Nginx+PHP-FPM最適化スキルのまとめ
1.Unixドメインソケット通信 Unixドメインソケット通信方法については以前簡単に紹介しました。参照:Nginx+PHP-FPMドメインソケット構成方法 Unixドメインソケットがないためネットワークを使用すると、Nginx と php-fpm 間の通信のパフォーマンスは確かに向上しますが、同時実行性が高い場合は不安定になります。 Nginx は頻繁にエラーを報告します: アップストリームへの接続中に unix:/dev/shm/php-fcgi.sock への Connect() が失敗しました (11: リソースが一時的に利用できません) はい、次の 2 つの方法で安定性を向上させます: 1) nginx と php-fpm のバックログを増やす 設定方法は次のとおりです: nginx 設定ファイルのこのドメイン名のサーバーの下に、listen の後にデフォルトの backlog= を追加します。 80 1024。 同時に、php-fpm.conf の listen.backlog を 1024 に設定します。デフォルトは 128 です。 2) sock ファイルと php-fpm インスタンスの数を増やします 新しい sock ファイルを作成し、Nginx のアップストリーム モジュールを使用して、背後にある 2 セットの php-fpm インスタンスへのリクエストの負荷を分散します。 2 つのソックス ファイルの方が優れています。 2.php-fpmパラメータチューニング 2.1 プロセス数php-fpmのワーカープロセスの初期/アイドル/最大数 pm.max_children = 300 pm .start_servers = 20 pm.min_spare_servers = 5 pm.max_spare_servers = 35
2.2 最大処理リクエスト数 リクエストの最大数処理済みとは、php-fpm ワーカー プロセスがいくつかのリクエストを処理した後に終了し、マスター プロセスが新しいプロセスを再起動することを指します。 この構成の主な目的は、プログラムによって参照される PHP インタープリターまたはサードパーティのライブラリによって引き起こされるメモリ リークを回避することです。
pm.max_requests = 10240 2.3 最大実行時間 最大実行時間はphp.iniとphp-fpm.confの両方で設定できます。設定項目はそれぞれmax_execution_timeとrequest_terminate_timeoutです。 その役割と影響については、Nginx の 502 エラーと 504 エラーの詳細な説明を参照してください 3. php-fpm の高 CPU 使用率のトラブルシューティング方法 3.1CPU 使用率の監視方法 1) top コマンド を直接実行した後top コマンドを実行して、1 を入力すると、各コアの CPU 使用率が表示されます。また、top -d 0.1 によりサンプリング時間を短縮できます。 以下のsarは1秒だけ短いようです。 2) sar コマンド sar および iostat コマンドのインストール: sysstat.x86_64: sar および iostat システム監視コマンド yum install -y sysstat.x86_64 sar -P ALL 1 100 を実行します。 -P ALL はすべてのコアを監視することを意味し、1 は 1 秒ごとに収集することを意味し、100 は 100 回収集することを意味します。 出力結果は次のとおりです: pcpu%user%nice%System%System%Steal%Idle all 85.54 0.00 5.69 0.00 8.76 0 74.75 0.00 0.00 0.00 0.00 0.00 0.00 2 0.00 92 0.00 0.00 6.86 3 91.00 0.00 2.00 0.00 0.00 7.00 4 75.00 0.00 9.00 0.00 0.00 16.00 5 94.95 0.00 5.05 0.00 0.00 0.00 6 95.00 0.00 4.00 0.00 0.00 1.00 7 87.88 0.00 4.04 0.00 0.00 8.08 8 93.94 0.00 3.03 0.00 0.00 3.03 9 88.00 0.00 3.00 0.00 0.00 9.00 10 89.11 0.00 2.97 0.00 0.00 7.92 11 82.35 0.00 3.92 0.00 0.00 13.73 12 73.27 0.00 7.92 0.00 0 .00 18.81 13 81.44 0.00 4.12 0.00 0.00 14.43 14 77.23 0.00 6.93 0.0 0 0.00 15.84 15 78.79 0.00 4.04 0.00 0.00 17.17 3.2 スローログを有効にする出力 php-fpm スローログを設定します。しきい値は 2 秒です: request_slowlog_timeout = 2 slowlog = log/$pool.log。sort/uniq コマンドを使用して、php-fpm の遅いログを分析して要約します。 [root@b28-12 log]# grep -v "^$" www.log.slow.tmp | " " -f 3,2 | ソート -k1,1nr | ヘッド -n 50 5181 run() /www/test.net/framework/web/filters/CFilter.php:41 フィルター() /www/test.net/framework/web/filters/CFilterChain.php:131 2670 = /www/test.net/index.php 2636 run() /www/test.net/application/controllers/survey /index .php:665 2630 アクション() /www/test.net/application/controllers/survey/index.php:18 2625 実行() /www/test.net/framework/web/actions/CAction.php :75 2605 runWithParams() /www/test.net/framework/web/CController.php:309 2604 runAction() /www/test.net/framework/web/filters/CFilterChain.php:134 2538 run( ) / www/test.net/framework/web/CController.php:292 2484 runActionWithFilters() /www/test.net/framework/web/CController.php:266 2251 run() /www/test.net/ Framework/web/CWebApplication.php:276 1799 translation() /www/test.net/application/libraries/Limesurvey_lang.php:118 1786 load_tables() /www/test.net/application/third_party/php-gettext/gettext.php:254 1447 runController() /www/test.net/framework/web/CWebApplication.php:135 パラメータの説明: sort: 単語を並べ替えます Uniq -c: 固有の行を表示し、ファイル内でこの行が出現する回数を各行の先頭に追加します Sort -k1,1nr: 最初のフィールド、値、および逆順で並べ替えます Head -10: データの最初の 10 行を取得します 3.3 strace を使用してプロセスを追跡します 1) nohup を使用して、アタッチ時の php-fpm プロセスが終了するまで strace をバックグラウンド実行に変換します: nohup strace - T -p 13167 > 13167-strace.log & パラメータの説明: -c Co各システムコールの実行時刻、回数-d は、標準エラーに関する strace デバッグ情報を出力します。 -f は、fork 呼び出しによって生成された子プロセスを追跡します。 [root@b28-12 log]# strace -cp 9907 プロセス 9907 接続 - 終了のための中断 プロセス 9907 切り離されました % time 秒 usecs/call calls errors syscall ------ ------- ---- ----------- --------- ------------- ---------------- 56.61 0.016612 5 3121 read 11.11 0.003259 1 2517 715統計 8.04 0。 002358 7 349 brk 6.02 0.001767 1 1315 世論調査 4.28 0.001255 6 228 recvfrom 2.71 0.000796 1 671 open 2.54 0.000745 0 2453 fcntl 2.37 0.000696 1 1141 write 1.69 0.000497 1 593 13 アクセス 1.37 0.000403 0 1816 lseek 0.89 0.000262 1 451 22 sendto 0.56 0.000163 1 276 208 lstat 0.49 0.000145 0 384 getcwd 0.31 0.000090 0 1222 fstat 0.28 0.000082 0 173 munmap 0.26 0.000077 0 174 mmap 0.24 0.000069 2 41 ソケット 0.23 0.000068 0 725 閉じる 0.00 0.000000 0 13 rt_sigaction 0.00 0.000000 0 13 rt_sigprocmask 0.00 0。 000000 0 1 rt_sigreturn 0.00 0.000000 0 78 setitimer 0.00 0.000000 0 26 26 接続 0.00 0.000000 0 15 2 受け入れる 0.00 0.000000 0 39 recvmsg 0.00 0.000000 0 26 シャットダウン 0.00 0.000000 0 13 バインド 0.00 0.000000 0 13 getsockname 0.00 0.000000 0 65 setsockopt 0.00 0.00 0000 0 13 を取得ockopt 0.00 0.000000 0 8 getdents 0.000000 ,、、、、、 、、、 、、、、、、、、、、、、、、、、、、、、、、、、''' ---- ----------- --- -------- --------- --------- ------ ---------- 100.00 0.029344 18000 986 total ps : strace を使用すると、PHP インタプリタの解釈と実行プロセスを学習できます 3.4 PHP の解釈と実行を高速化します プログラムに問題がない場合は、そのまま実行してください操作が多すぎて、実行する方法がありませんそれを最適化します。次に、APC や xcache などの PHP アクセラレータを使用して、CPU が PHP ファイルを解釈するのにかかる時間を短縮することを検討してください。 これらの PHP アクセラレータは、PHP ファイルが最初に解釈されるときに中間コードのオペコードを生成するため、その後の実行が大幅に高速になり、CPU オペレーションの一部が軽減されます。 xcache を例として、インストールおよび構成方法を見てみましょう。 xcache をインストールするコマンドは次のとおりです。 ./configure には多くのパラメーターがあり、それらが何に使用されるのかがわかりません。ので、--enable-xcache をオンにしました。 tar zxvf xcache-3.0.3.tar.gz / usr/local/php/bin/phpize ./configure --with-php-c/local/php/bin/php-config --enable-xcache make make install php.ini の設定は次のとおりです。最も重要なのは、赤でマークされた 2 つのパラメータです。一般に、xcache.size は、xcache.count が同じであるように決定することをお勧めします。 CPU コアの数として: [xcache.admin]xcache.admin.enable_auth = Offxcache.admin.user = "xcache"FAQ php-fpm の起動時にエラーが報告されます: xcache.mmap_path で設定されたファイルを開いたり作成したりできません。パスの権限を確認するか、xcache.size/var_size をシステムの制限に照らして確認してください これは、/tmp/xcache がファイルであり、ディレクトリに作成できないためです。 php-fpm サービスを再起動した後、top コマンドを使用して、各ワーカー プロセスの VIRT (スワップ領域を含む) が xcache.size のサイズであるにもかかわらず、REQ が非常に小さくなっていることを確認します。 上記の構成を使用すると、CPU 使用率のピーク時間が短縮されましたが、どこかに設定ミスがあるかどうかはわかりませんが、依然としてすべてのコアがピーク時に 90% を超えます。 さらに、同時実行性が高い場合、/dev/zero の設定方法では Nginx 502 エラーが発生することがよくあります。 /tmp/xcache と readonly_protection の有効化は非常に安定しています。 4.php プログラムのパフォーマンス監視 一般的な方法は、xdebug のパフォーマンス監視機能を有効にし、WinCacheGrind ソフトウェアを通じて xdebug の出力結果を分析することです。 xdebugのインストールとIDEでのデバッグ方法については、Vim+ .auto_profile = on xdebug.collect_params = onxdebug.collect_return = onxdebug.profiler_enable = on xdebug.trace_output_dir = "/tmp"を参照してください。 xdebug.profiler_output_dir = "/tmp" は、PHP関数を実行するためのすべてのパフォーマンスデータを出力しますが、生成されるファイルも大きくなります。出力データの量を減らすために、collect_params、collect_return、 などの一部のオプションをオフにすることができます。または、自動出力をオフにして、監視する関数の最初と最後で xdebug 関数を呼び出して、指定した関数を監視します。-tt は、出力の各行に時間情報を追加します (マイクロ秒レベル)。 -ttt マイクロ秒レベルの出力。時間は秒単位で表示されます。 -T は、各呼び出しで消費された時間を表示します。 -v は、環境変数、ステータスに関連する呼び出しを出力します。デフォルトでは、入力呼び出しと出力呼び出しは出力されません。 -V は strace のバージョン情報を出力します。 -x は非標準の文字列を 16 進形式で出力します。 -a 列は、戻り値の出力位置を設定します。デフォルトは 40 です。 -e execve は execve などのシステムコールのみを記録します -p メインプロセス番号 著作権声明:この記事はブロガーによるオリジナル記事であり、ブロガーの許可なしに転載することはできません。 以上、内容の側面も含めて Nginx+PHP-FPM 最適化スキルの概要を紹介しましたが、PHP チュートリアルに興味のある友人の参考になれば幸いです。
|