ホームページ >バックエンド開発 >PHPチュートリアル >php設定php-fpm起動パラメータとconfiguration_PHPチュートリアルの詳細な説明

php設定php-fpm起動パラメータとconfiguration_PHPチュートリアルの詳細な説明

WBOY
WBOYオリジナル
2016-07-13 10:25:35986ブラウズ

複数のディレクトリに同意する

/usr/local/php/sbin/php-fpm
/usr/local/php/etc/php-fpm.conf
/usr/local/php/etc/php.ini
まず、php-fpmパラメータを起動します

コードをコピー コードは次のとおりです:

#php-fpm構成をテストします
/usr/local/php/sbin/php-fpm -t
/usr/local/php/sbin/php -fpm -c /usr/local/php/etc/php.ini -y /usr/local/php/etc/php-fpm.conf -t

#php-fpmの起動
/usr/local/php/sbin /php -fpm
/usr/local/php/sbin/php-fpm -c /usr/local/php/etc/php.ini -y /usr/local/php/etc/php-fpm.conf

#閉じる php -fpm
kill -INT `cat /usr/local/php/var/run/php-fpm.pid`

#Restart php-fpm
kill -USR2 `cat /usr/local/php/var/run /php -fpm.pid`

2番目、php-fpm.confの重要なパラメータの詳細な説明
コードをコピーします コードは次のとおりです:

pid = run/php-fpm.pid
#pid 設定、デフォルトはインストールディレクトリの var/run/php-fpm.pid です。有効にすることをお勧めします

error_log = log/php-fpm.log
#エラー ログ、デフォルトはインストール ディレクトリの var/log/php-fpm.log です

log_level = Notice
#エラー レベルは次のとおりです: アラート (すぐに処理する必要があります)、エラー (エラー状況)、警告 (警告)状況)、通知 (一般的な重要な情報)、デバッグ (デバッグ情報)。デフォルト: Notice.

emergency_restart_threshold = 60
emergency_restart_interval = 60s
#値セット内で SIGSEGV または SIGBUS エラーがある php-cgi プロセスの数を示します。 Emergency_restart_interval によって、emergency_restart_threshold を超えた場合、php -fpm は正常に再起動します。これら 2 つのオプションは通常、デフォルト値のままです。

process_control_timeout = 0
#メインプロセスの再利用シグナルを受け入れるための子プロセスのタイムアウトを設定します。使用可能な単位: s (秒)、m (分)、h (時間)、または d (日) デフォルトの単位: s (秒) 。デフォルト値: 0.

daemonize = yes
#バックグラウンドで fpm を実行します。デフォルト値は yes ですが、デバッグのために no に変更できます。 FPM では、複数のプロセス プールを異なる設定で実行できます。 これらの設定は、プロセス プールごとに個別に設定できます。

listen = 127.0.0.1:9000
#fpm リスニング ポート。これは nginx の php によって処理されるアドレスです。通常、デフォルト値で十分です。使用可能な形式は次のとおりです: 'ip:port'、'port'、'/path/to/unix/socket'。各プロセス プールを設定する必要があります。

listen.backlog = -1
#バックログ番号、-1 はなしを意味します。制限はオペレーティング システムによって決定されるため、この行をコメントアウトするだけです。バックログの意味参照: http://www.3gyou.cc/?p=41

listen.allowed_clients = 127.0.0.1
#必要に応じて、FastCGI プロセスの IP へのアクセスを許可します。他のホストの nginx を設定するには、この FPM プロセスにもアクセスできます。リッスンの場所は、アクセス可能なローカル IP に設定する必要があります。デフォルト値は任意です。各アドレスはカンマで区切られます。設定されていないか空の場合、どのサーバーでも接続を要求できます

listen.owner = www
listen.group = www
listen.mode = 0666
#unix ソケット設定オプション (tcp を使用する場合)アクセスするには、ここにコメントしてください。

user = www
group = www
#プロセスを開始するアカウントとグループ

pm = 動的 #専用サーバーの場合、pm を静的に設定できます。
#子プロセスを制御する方法。オプションは静的と動的です。 static を選択した場合、固定数の子プロセスが pm.max_children によって指定されます。動的が選択されている場合、次のパラメータによって決定されます:
pm.max_children #、子プロセスの最大数
pm.start_servers #、起動時のプロセスの数
pm.min_spare_servers #、アイドル状態の最小数を確保するためプロセス、アイドル状態のプロセスがこの値より小さい場合、新しいサブプロセス
pm.max_spare_servers を作成して、アイドル状態のプロセスの最大数を確保します # アイドル状態のプロセスがこの値より大きい場合、クリーンアップされます

pm。 .max_requests = 1000
#各サブプロセスが再起動される前に処理されるリクエストの数を設定します。「0」に設定すると、リクエストは常に受け入れられます。デフォルト値: 0.

pm.status_path = /status
#FPM ステータス ページの URL が設定されていない場合、Munin モニタリングは ping URL を使用します。

ping.path = /ping
#FPM 監視ページ。設定されていない場合、このページは FPM が有効かどうかを外部から検出するために使用され、リクエストに応答する必要があることに注意してください。スラッシュ (/) で始まります。

ping.response = pong
#ping リクエストの返信応答を定義するために使用されます。返されるテキスト/プレーン フォーマット テキストは HTTP 200 です。デフォルト値: pong.

request_terminate_timeout = 0
# のタイムアウト中止時間を設定します。このオプションは、php.ini 設定の「max_execution_time」が何らかの特別な理由で実行中のスクリプトを中止しない場合に便利です。これを「0」に設定すると、502 のときにこのオプションを変更してみることができます。エラーが頻繁に発生します。

request_slowlog_timeout = 10s
#リクエストにタイムアウト期間が設定されている場合、対応するPHPコールスタック情報はスローログに完全に書き込まれます。これを「0」に設定すると、「オフ」を意味します

slowlog = log/$ pool。 .log.slow
#request_slowlog_timeout で使用される低速リクエストのログ記録

rlimit_files = 1024
#ファイルオープン記述子の rlimit 制限を設定します。デフォルト値: デフォルトのオープン可能なハンドルは 1024 です。ulimit を使用できます。 -n 表示、ulimit -n 2048 の変更。

rlimit_core = 0
# コア rlimit の最大制限値を設定します。 使用可能な値: '無制限'、0 または正の整数: 起動時にシステム定義の値。 to は絶対パスです。設定されていない場合、chroot は使用されません。

chdir =
#起動時にこのディレクトリに自動的に設定されます。定義されたディレクトリは絶対パスである必要があります。 : 現在のディレクトリ、または / ディレクトリ (chroot の場合)

catch_workers_output = yes
#実行中のプロセス中の stdout と stderr をメイン エラー ログ ファイルにリダイレクトします。設定されていない場合、stdout と stderr は、次に従って /dev/null にリダイレクトされます。 FastCGI ルール。デフォルト値: 空。


3 つの一般的なエラーと解決策

1. request_terminate_timeout によるリソースの問題
request_terminate_timeout の値が 0 または長すぎると、file_get_contents でリソースの問題が発生する可能性があります。

file_get_contents によって要求されたリモート リソースの応答が遅すぎる場合、file_get_contents は常にそこでスタックし、タイムアウトしません。 php.ini の max_execution_time で PHP スクリプトの最大実行時間を設定できることはわかっていますが、php-cgi (php-fpm) ではこのパラメータは有効になりません。 PHP スクリプトの最大実行時間を実際に制御できるのは、php-fpm.conf 設定ファイルの request_terminate_timeout パラメータです。

request_terminate_timeout のデフォルト値は 0 秒です。これは、PHP スクリプトが実行を継続することを意味します。このように、すべての php-cgi プロセスが file_get_contents() 関数でスタックすると、この Nginx+PHP Web サーバーは新しい PHP リクエストを処理できなくなり、Nginx はユーザーに「502 Bad Gateway」を返します。 PHP スクリプトの最大実行時間を設定するにはこのパラメータを変更する必要がありますが、根本的な原因ではなく症状を治療するだけです。たとえば、これを 30 秒に変更すると、file_get_contents() が Web ページのコンテンツを取得するのが遅い場合、これは 150 の php-cgi プロセスが 1 秒あたり 5 つのリクエストしか処理できないことを意味し、Web サーバーが「502 Bad」を回避することも困難になります。ゲートウェイ"。解決策は、request_terminate_timeout を 10 秒または適切な値に設定するか、file_get_contents にタイムアウト パラメーターを追加することです。

コードをコピーします コードは次のとおりです:

$ctx = stream_context_create(array(
'http' => array(
'timeout' => 10 //タイムアウトを秒単位で設定します
)
); .max_requests = 1000


各子プロセスが再起動される前に処理されるリクエストの数を設定します。「0」に設定すると、リクエストが常に受け入れられます。 PHP_FCGI_MAX_REQUESTS 環境変数と同等。デフォルト値: 0。
この設定は、PHP-CGI プロセスによって処理されるリクエストの数が 500 に累積すると、プロセスが自動的に再起動されることを意味します。

しかし、なぜプロセスを再起動するのでしょうか?
一般に、プロジェクトでは、PHP のサードパーティ ライブラリをある程度使用します。これらのサードパーティ ライブラリには、PHP-CGI プロセスが定期的に再起動されないと、必然的にメモリ使用量が増加します。そこで、PHP-FPMは、PHP-CGIの管理者として、指定回数リクエストを行ったPHP-CGIプロセスを再起動し、メモリ使用量が増加しないように監視する機能を提供します。 同時実行性の高いサイトで 502 エラーが頻繁に発生するのは、まさにこのメカニズムのため、PHP-FPM が NGINX からのリクエスト キューをうまく処理していないことが原因だと思われます。ただし、私はまだ PHP 5.3.2 を使用していますが、この問題が PHP 5.3.3 でも存在するかどうかはわかりません。 私たちの現在の解決策は、この値をできるだけ大きく設定して、PHP-CGI の再 SPAWN の回数をできる限り減らし、同時に全体的なパフォーマンスを向上させることです。実際の運用環境では、メモリ リークが明らかではないことが判明したため、この値を非常に大きな値 (204800) に設定しました。誰もが実際の状況に応じてこの値を設定する必要があり、やみくもに増やすことはできません。 そうは言っても、このメカニズムの目的は、PHP-CGI が過剰なメモリを占有しないようにすることだけです。なぜメモリを検出して対処しないのでしょうか。 Gao Chunhui 氏の意見に非常に同意します。プロセスの固有使用量のピークを設定して PHP-CGI プロセスを再起動することが、より良い解決策となるでしょう。

3、php-fpm のスロー ログ、デバッグ、および例外のトラブルシューティング アーティファクト:
request_slowlog_timeout はタイムアウト パラメーターを設定し、slowlog はスロー ログの保存場所を設定します


コードをコピーします
コードは次のとおりです:


tail -f /var/log/www.slow.log

上記のコマンドは、実行が遅すぎるphpプロセスを確認できます。
プロンプト情報に従って問題をトラブルシューティングすると、過剰なネットワーク読み取りと遅い MySQL クエリという一般的な問題がわかります。

http://www.bkjia.com/PHPjc/825014.htmlwww.bkjia.com
tru​​e

http://www.bkjia.com/PHPjc/825014.html

技術記事
いくつかのディレクトリについて合意します /usr/local/php/sbin/php-fpm /usr/local/php/etc/php-fpm.conf /usr/local/php/etc/php.ini 1. php-fpmの起動パラメータ次のようにコードをコピーします: #Test php-fpm 構成...

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。