PHP についてたくさんのことを学びました。PHP-FPM の構成と使用法の概要を完全にマスターできたでしょうか。そうでない場合は、この記事に従って学習を続けてください
PHP-FPM の構成および使用法の概要:
PHP-FPM は PHP FastCGI マネージャーです。実際には、PHP ソース コードのパッチであり、FastCGI プロセスを変換するように設計されています。管理は PHP ソフトウェア パッケージに導入されます。使用する前に、これを PHP ソース コードにパッチしてコンパイルする必要があります。 PHP はこのバージョンからソフトウェア パッケージに含まれており、パッチ パッケージとしては存在しなくなったため、PHP 5.3.2 以降のバージョンで直接開いて使用できるようになりました。
· いくつかの概念の理解
· Nginx PHP 構成
· Php-Fpm の操作
1. いくつかの概念の理解
1)、CGI
CGI の正式名は「Common Gateway Interface」 (Common Gateway Interface) です。これは、HTTP サーバーが他のマシン上のプログラムと通信するためのインターフェイスです。そのプログラムはネットワーク上で実行する必要があります。サーバ。
注:
CGI は、言語に標準入力、出力、および環境変数がある限り、どの言語でも作成できます。
2), FastCGI
FastCGI は常駐 CGI であり、常時実行可能であり、起動していれば毎回 fork する手間がかかりません (これはCGI について最も重要なこと)、非常に批判されている fork-and-execute パターン)。また、分散コンピューティングもサポートしています。つまり、FastCGI プログラムを Web サイト サーバー以外のホストで実行し、他の Web サイト サーバーからのリクエストを受け入れることができます。
FastCGI は、言語に依存しないスケーラブルなアーキテクチャ CGI オープン拡張機能であり、その主な動作は CGI インタプリタ プロセスをメモリ内に保持することで、より高いパフォーマンスを実現します。 CGI インタープリタの繰り返しロードが CGI パフォーマンス低下の主な原因であることがわかっています。CGI インタープリタがメモリに保存され、FastCGI プロセス マネージャーによって受け入れられる場合、良好なパフォーマンス、スケーラビリティなどが提供されます。
利点:
1. FastCGI は言語に依存しません;
2. FastCGI はコア Web サーバーから独立して実行され、API よりも安全な環境を提供します。 API はアプリケーションのコードをコア Web サーバーにリンクします。つまり、アプリケーションが間違った API を使用すると、他のアプリケーションやコア サーバーが破損する可能性があります。悪意のある API アプリケーション コードは、別のアプリケーションまたはコア サーバーのキーを盗むことさえできます;
3. FastCGI テクノロジは現在、次の言語をサポートしています: C/C、Java、Perl、Tcl、Python、SmallTalk 、Ruby など。関連モジュールは、Apache、ISS、Lighttpd などの一般的なサーバーでも利用できます;
4. FastCGI は Web サーバーの内部アーキテクチャに依存しないため、サーバー テクノロジが変わっても、FastCGI は安定したままです;
欠点:
マルチプロセスであるため、CGI マルチスレッドより多くのサーバー メモリを消費します。PHP-CGI インタープリタは、プロセスごとに 7 ~ 25 メガバイトのメモリを消費します。この数値を 50 倍します。または、100 は非常に大きなメモリ番号です。
Nginx 0.8.46 PHP 5.2.14 (FastCGI) サーバーには 30,000 の同時接続があり、10 個の Nginx プロセスが開くと 150M のメモリを消費し (15M*10=150M)、64 個の php-cgi プロセスが開くと 1280M を消費します。のメモリ (20M*64=1280M) に、システム自体によって消費されるメモリを加えた場合、合計消費量は 2GB 未満のメモリになります。サーバーのメモリが小さい場合は、25 個の php-cgi プロセスしか開くことができないため、php-cgi によって消費される合計メモリはわずか 500M になります。
上記のデータは、Apache (バージョン 6) よりも 10 倍優れた Web サーバーを構築するための Nginx 0.8.x PHP 5.2.13 (FastCGI) から抜粋したものです。
原則:
1. Web サーバーが起動すると、FastCGI プロセス マネージャーがロードされます;
2. FastCGI プロセス マネージャーが初期化され、複数の CGI インタープリター プロセスを開始します ( PHP-CGI) を実行し、Web サーバーからの接続を待ちます。
3. クライアント要求が Web サーバーに到達すると、FastCGI プロセス マネージャーが CGI インタープリターを選択して接続し、Web サーバーが CGI を転送します。環境変数と標準入力は、FastCGI 子プロセス PHP-CGI に送信されます。
4. FastCGI サブプロセスは処理が完了すると、同じ接続から標準出力とエラー情報を Web サーバーに返します。 FastCGI 子プロセスが接続を閉じると、リクエストが処理されます。 FastCGI 子プロセスは、FastCGI プロセス マネージャー (Web サーバーで実行されている) からの次の接続を待機して処理します。 CGI モードでは、PHP-CGI はここで終了します。
上記の状況では、CGI が通常どれほど遅いか想像できると思いますが、PHP へのすべての Web リクエストでは、php.ini を再解析し、すべての拡張機能を再ロードし、すべてのデータ構造を再初期化する必要があります。 FastCGI では、これらすべてがプロセスの開始時に 1 回だけ行われます。また、データベースの永続的な接続も機能します。 ######注記:###
FastCGI の主な利点は、動的言語を HTTP サーバーから分離できることです。そのため、Nginx と PHP/PHP-FPM は、フロントエンド Nginx サーバーへの負荷を共有し、Nginx がPHP/PHP-FPM サーバーは、静的リクエストを排他的に処理し、動的リクエストを転送しますが、PHP/PHP-FPM サーバーは PHP 動的リクエストを排他的に解析します。
3)、PHP-CGI
PHP-CGI は、PHP に付属する FastCGI マネージャーです。
PHP-CGI の欠点:
1. php-cgi の php.ini 設定を変更した後、新しい php-ini を有効にするために php-cgi を再起動する必要があります。スムーズな再起動ができません。
2. php-cgi プロセスを直接強制終了すると、php は実行できなくなります (PHP-FPM と Spawn-FCGI にはこの問題はなく、デーモン プロセスは新しい子プロセスをスムーズに再生成します)。
4), Spawn-FCGI
Spawn-FCGI は一般的な FastCGI 管理サーバーです。lighttpd の一部です。多くの人が Lighttpd を使用しています。Spawn-FCGI が管理を実行します。 FastCGI モードでも動作しますが、多くの欠点があります。 PHP-FPM の登場により、いくつかの問題はある程度軽減されましたが、PHP-FPM の欠点の 1 つは、再コンパイルする必要があり、すでに実行されている環境の一部にかなりのリスクを引き起こす可能性があることです (参照)。PHP は PHP 5.3 で直接使用できます。 3 -FPM。
Spawn-FCGI は別個のプロジェクトになり、より安定し、多くの Web サイトの構成に利便性をもたらします。多くのサイトでは、動的 Web ページを解決するために nginx と組み合わせています。最新の lighttpd にはこの部分 (http://www.lighttpd.net/search?q=Spawn-FCGI) は含まれていませんが、以前のバージョンには含まれています。これは、lighttpd-1.4.15
バージョン (http://www.lighttpd.net/download/lighttpd-1.4.15.tar.gz) に含まれており、Spawn-FCGI の現在のダウンロード アドレスは次のとおりです。 http://redmine.lighttpd.net/projects/spawn-fcgi、最新バージョンは http://www.lighttpd.net/download/spawn-fcgi-1.6.3.tar.gz です。
注:
最新の Spawn-FCGI については、lighttpd.net Web サイトで「Spawn-FCGI」を検索して、最新バージョンのリリース アドレスを見つけることができます。
5), Spawn-FCGI
PHP-FPM と比較すると非常に使いやすく、設定は PHP-FPM.ini ファイルにあり、起動と再起動は php から行うことができます/sbin /PHP-FPM。さらに便利なのは、php.ini を変更した後、PHP-FPM リロードを直接使用してロードできることです。プロセスを強制終了せずに、php.ini の変更とロードを完了できます。
結果は、次のことを示しています。 PHP-FPM を使用すると、php に多くの機能が追加され、パフォーマンスが向上します。 PHP-FPM によって制御されるプロセスの CPU リサイクル速度は比較的遅く、メモリは均等に割り当てられます。
Spawn-FCGI によって制御されるプロセスの CPU はすぐに低下し、メモリ割り当ては比較的不均一になります。未割り当てのように見えるプロセスが多数ありますが、占有率が高いプロセスもあります。プロセス タスクの不均等な分散が原因である可能性があります。これは全体的な応答速度の低下にもつながります。 PHP-FPM の適切な分散は、全体的な応答とタスクの平均につながります。
2. Nginx PHP 構成
1. プロセス数の最適化
pm = Dynamic
pm.max_children = 300
pm。 start_servers = 20
pm.min_spare_servers = 5
pm.max_spare_servers = 35
2. リクエストの最大数の最適化
pm.max_requests = 10240
注:
これは、PHP パーサーまたは参照されるサードパーティ ライブラリによって引き起こされるメモリ リークに対処するために使用されます。
リクエストの最大数: php-fpm ワーカー プロセスが処理後に終了するリクエストの数を指します。
3. 最大実行時間の最適化 (php.ini)
request_terminate_timeout = 20
注:
これは、PHP 実行時間の処理に使用されます。長すぎる場合は 502 エラーまで。
この期間の設定は、php.ini (max_execution_time) または php-fpm.conf で設定できますが、グローバル設定に影響を与えないように、php-fpm.conf で実装できます。
nginx.conf で max_fail (値を大きくする) およびfail_timeout (値を小さくする) と組み合わせて設定する必要があることに注意してください。
nginx.conf:
location ~ \.php$ {
…
fastcgi_connect_timeout 180;
fastcgi_read_timeout 600 ;
fastcgi_send_timeout 600;
#}
注:
PHP-FPM によって設定されるスクリプトの最大実行時間すでに十分な長さですが、時間のかかる PHP スクリプトを実行すると、Nginx エラー が 504 エラーに変わっていることがわかりました。これは、PHP の設定を変更しただけであり、Nginx にも上流サーバーとの通信のタイムアウトに関する設定 fatcgi_connect/read/send_timeout があるためです。
4. php-fpm 高 CPU 使用率のトラブルシューティング
top コマンド:
top コマンドを直接実行した後、1 を入力して各コアの CPU 使用率を確認します:
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 回収集することを意味します;
5、低速ログを有効にする
slowlog = log/$pool.log.slow
request_slowlog_timeout = 2
注:
上記は php-fpm を開いたときの遅いログです。時間のしきい値は 2 秒です。
実行:
grep -v "^$" php.slow.log | Cut -d " " -f 3,2 | sort |uniq -c | sort -k1,1nr | head -n 50
NOTE:
sort: 単語を並べ替えます
uniq -c: 唯一の行を表示し、ファイル内でこの行が出現する回数を各行の先頭に追加します。
ソート -k1,1nr: 最初のフィールド、値でソートし、逆順にソートします。 order
head –n 10: データの最初の 10 行を取得します
PS:
遅いログをオンにする目的は、どの PHP スクリプトの実行を追跡して分析することです。時間が、設定された request_slowlog_timeout time を超えます。この設定時間を超えると、スクリプトが記録されます。
3. Php-Fpm の操作
PHP5.3.3 での php-fpm は、php-fpm の以前の /usr/local/php/sbin/php-fpm(start |stop|reload) をサポートしなくなりました。 ) および他のコマンドはシグナル制御を使用する必要があります:
マスター プロセスは次のシグナルを理解できます
INT, TERM は直ちに終了します;
QUIT スムーズに終了します;
USR1 ログ ファイルを再度開きます;
USR2 すべてのワーカー プロセスをスムーズにリロードし、構成モジュールとバイナリ モジュールをリロードします;
例:
php-fpm 閉じる: kill -INT` cat /usr/local/php/var/run/php-fpm.pid`
php-fpm 再起動: kill -USR2`cat /usr/local/php/var/run/php -fpm.pid `
php-fpm プロセスの数を表示します:
$ps aux | grep -c php-fpm
推奨される学習: "PHP ビデオ チュートリアル >>
以上がPHP-FPM の構成と使用法の概要を 1 分で理解するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。