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

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

/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 までご連絡ください。
PHPセッションの概念を簡単に説明してください。PHPセッションの概念を簡単に説明してください。Apr 26, 2025 am 12:09 AM

phpssionsStrackuserdataacrossmultiplepagerequestsusingauniqueidstoredinacookie.here'showtomanageetheemefectively:1)Startassession withsession_start()andstoredatain $ _ session.2)RegeneratesseSsessidafterloginwithsession_id(the topreventes_id)

PHPセッションに保存されているすべての値をどのようにループしますか?PHPセッションに保存されているすべての値をどのようにループしますか?Apr 26, 2025 am 12:06 AM

PHPでは、次の手順を通じてセッションデータを繰り返すことができます。1。session_start()を使用してセッションを開始します。 2。$ _Sessionアレイのすべてのキー価値ペアを介してforeachループを反復します。 3.複雑なデータ構造を処理する場合、is_array()またはis_object()関数を使用し、print_r()を使用して詳細情報を出力します。 4.トラバーサルを最適化する場合、ページングを使用して、一度に大量のデータの処理を避けることができます。これにより、実際のプロジェクトでPHPセッションデータをより効率的に管理および使用するのに役立ちます。

ユーザー認証にセッションを使用する方法を説明します。ユーザー認証にセッションを使用する方法を説明します。Apr 26, 2025 am 12:04 AM

このセッションは、サーバー側の状態管理メカニズムを介してユーザー認証を実現します。 1)セッションの作成と一意のIDの生成、2)IDはCookieを介して渡されます。3)サーバーストアとIDを介してセッションデータにアクセスします。

PHPセッションにユーザーの名前を保存する方法の例を挙げてください。PHPセッションにユーザーの名前を保存する方法の例を挙げてください。Apr 26, 2025 am 12:03 AM

tostoreauser'snameInappession、starthessession withsession_start()、thensignthenameto $ _session ['username']。1)ousession_start()toinitializethessession.2)assighttheuser'snameto $ _ session ['username']

PHPセッションを失敗させる可能性のあるいくつかの一般的な問題は何ですか?PHPセッションを失敗させる可能性のあるいくつかの一般的な問題は何ですか?Apr 25, 2025 am 12:16 AM

PHPSESSIONの障害の理由には、構成エラー、Cookieの問題、セッションの有効期限が含まれます。 1。構成エラー:正しいセッションをチェックして設定します。save_path。 2.Cookieの問題:Cookieが正しく設定されていることを確認してください。 3.セッションの有効期限:セッションを調整してください。GC_MAXLIFETIME値はセッション時間を延長します。

PHPでセッション関連の問題をどのようにデバッグしますか?PHPでセッション関連の問題をどのようにデバッグしますか?Apr 25, 2025 am 12:12 AM

PHPでセッションの問題をデバッグする方法は次のとおりです。1。セッションが正しく開始されるかどうかを確認します。 2.セッションIDの配信を確認します。 3.セッションデータのストレージと読み取りを確認します。 4.サーバーの構成を確認します。セッションIDとデータを出力し、セッションファイルのコンテンツを表示するなど、セッション関連の問題を効果的に診断して解決できます。

session_start()が複数回呼び出されるとどうなりますか?session_start()が複数回呼び出されるとどうなりますか?Apr 25, 2025 am 12:06 AM

session_start()への複数の呼び出しにより、警告メッセージと可能なデータ上書きが行われます。 1)PHPは警告を発し、セッションが開始されたことを促します。 2)セッションデータの予期しない上書きを引き起こす可能性があります。 3)session_status()を使用してセッションステータスを確認して、繰り返しの呼び出しを避けます。

PHPでセッションのライフタイムをどのように構成しますか?PHPでセッションのライフタイムをどのように構成しますか?Apr 25, 2025 am 12:05 AM

PHPでのセッションライフサイクルの構成は、session.gc_maxlifetimeとsession.cookie_lifetimeを設定することで達成できます。 1)session.gc_maxlifetimeサーバー側のセッションデータのサバイバル時間を制御します。 0に設定すると、ブラウザが閉じているとCookieが期限切れになります。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

PhpStorm Mac バージョン

PhpStorm Mac バージョン

最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター