ホームページ  >  記事  >  バックエンド開発  >  PHP7 での php.ini、php-fpm、および www.conf の設定

PHP7 での php.ini、php-fpm、および www.conf の設定

藏色散人
藏色散人転載
2019-08-23 14:07:195050ブラウズ

PHP7php.ini、php-fpm、および www.conf の構成

php.ini は php を実行していますコア構成ファイル。以下は一般的な構成の一部です

##extension_dir=""##PHP 拡張ライブラリのパスを設定します

Expose_php = Off

##http ヘッダーでの PHP 情報の公開を避ける

#display_errors = Off

##mysql を呼び出すときに PHP エラーを公開しないようにする

log_errors = On

#●display_errors をオフにした後、PHP エラー ログをオンにします (パスは php-fpm.conf で構成されます)

zend_extension=opcache.so extension=mysqli.so extension=pdo_mysql.so

● PHP の opcache および mysql ダイナミック ライブラリをセットアップする

date.timezone = PRC

#PHP のタイムゾーンを設定します

##opcache.enable=1##● opcache をオンにする

##open_basedir = / usr/share/nginx/html;

#PHP スクリプトがアクセスできるディレクトリを設定します (実際の状況に応じて設定する必要があります)

php-fpm.conf は php-fpm プロセス サービスの構成ファイルです。一般的な構成の一部を次に示します。

error_log = /usr/local/php/logs/php -fpm.log

●設定 エラーログのパス

include=/usr/local/php7/etc/php-fpm.d/*.conf

##www.conf ファイルに導入される設定 (デフォルトで設定)

php-fpm.conf と www.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

● を示します。 Emergency_restart_interval で設定された値内で SIGSEGV または SIGBUS エラーのある php-cgi プロセスの数が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

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

listen.backlog = -1

# バックログ番号、-1 は無制限を意味し、オペレーティング システムによって決定されます。この行をコメントアウトするだけです。

listen.allowed_clients = 127.0.0.1

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

#listen.owner = www listen.group = www listen.mode = 0666

# Unix ソケット設定オプション。TCP を使用してアクセスする場合は、ここにコメントしてください。

user = www group = www

● プロセスを開始するアカウントとグループ

php-fpm プロセスプール最適化方法

pm = 動的

● 専用サーバーの場合、pm を静的に設定できます。 子プロセスを制御する方法。オプションは静的と動的です。 static を選択した場合、固定数の子プロセスが pm.max_children によって指定されます。動的が選択されている場合、次のパラメータによって決定されます:

pm.max_children

● 静的モードで開かれる php-fpm プロセスの数は動的モードでは制限されます。 mode php-fpm の最大プロセス数 (ここで、pm.max_spare_servers の値は pm.max_children 以下のみであることに注意してください)

pm.start_servers

# 動的モードの場合 開始された php-fpm プロセスの数。

#pm.min_spare_servers

#● アイドル プロセスの最小数を確認します。アイドル プロセスがこの値より少ない場合は、新しい子プロセスを作成します

pm.max_spare_servers

#● アイドル プロセスの最大数を確認します。アイドル プロセスがこの値より大きい場合、クリーンアップされます

# dm が static に設定されている場合、パラメータ pm.max_children のみが有効になります。システムはパラメータで設定された数の php-fpm プロセスを開きます。 php-fpm プロセスはおそらく 20m ~ 40m のメモリを占有するため、その数値サイズ設定は物理メモリのサイズに応じて設定する必要があります。また、データベースやシステム プロセスなどの他のメモリ占有にも注意を払う必要があります。 、上記4つのパラメータの設定値を決定します!

# dm が動的に設定されている場合、4 つのパラメータすべてが有効になります。 php-fpm の実行が開始されると、システムは pm.start_servers php-fpm プロセスを開始し、システムのニーズに応じて pm.min_spare_servers と pm.max_spare_servers の間で php-fpm プロセスの数を動的に調整します。このパラメーターでは、pm.start_servers の値が pm.min_spare_servers と pm.max_spare_servers の間にある必要があります。

#pm.max_requests = 1000#● 各子プロセスが再起動される前に処理されるリクエストの数を設定します。

#● 処理されるリクエストの最大数php を参照します - fpm ワーカー プロセスは、多数のリクエストを処理した後に終了され、マスター プロセスが新しいプロセスを再起動します。

# この構成の主な目的は、プログラムによって参照される PHP インタープリターまたはサードパーティのライブラリによって引き起こされるメモリ リークを回避することです。

#これは、メモリ リークがある可能性のあるサードパーティ モジュールに非常に役立ちます。「0」に設定すると、リクエストは常に受け入れられます。PHP_FCGI_MAX_REQUESTS 環境変数と同等です。デフォルト値: 0.

pm.status_path = /status

#● FPM ステータス ページの URL。設定されていない場合、ステータス ページにアクセスできません。デフォルト値: なし。Munin モニタリングでは # が使用されます。 ##ping.path = /ping

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

ping.response = pong

● ping リクエストの戻り応答を定義するために使用されます。返されるテキスト/プレーン形式のテキストは HTTP 200 です。デフォルト値: pong .

request_terminate_timeout = 0

● 単一リクエストのタイムアウト中止時間を設定します。このオプションは、「max_execution_time」の特別な理由により中止されない場合があります。 php.ini 設定 スクリプトの実行に便利です。「オフ」の場合は「0」に設定します。502 エラーが頻繁に発生する場合は、このオプションを変更してみてください。

request_slowlog_timeout = 10s

● リクエストが設定されたタイムアウトを超えると、対応する PHP コール スタック情報がスロー ログに完全に書き込まれます。設定 '0' は意味します。 'Off'

#slowlog = log/$pool.log.slow

● 低速リクエストのログ記録、request_slowlog_timeout とともに使用

rlimit_files = 1024#● ファイル オープン記述子の rlimit 制限を設定します。デフォルト値: デフォルトのオープン ハンドルのシステム定義値は 1024 で、ulimit -n、ulimit -n 2048 を使用して表示できます。変更されました。

rlimit_core = 0

● コア rlimit の最大制限値を設定します。使用可能な値: 'unlimited'、0 または正の整数。デフォルト値: システム定義値.

chroot =

● 起動時の chroot ディレクトリ。定義されたディレクトリは絶対パスである必要があります。設定されていない場合、chroot は使用されません。

chdir =

● 起動ディレクトリを設定します。起動中に自動的に Chdired されます。定義されたディレクトリは絶対パスである必要があります。デフォルト値: 現在のディレクトリ、または /ディレクトリ (chroot 時)

catch_workers_output = yes

● プロセスの実行中に stdout と stderr をメイン エラー ログ ファイルにリダイレクトします。設定されていない場合、stdout と stderr はFastCGI に基づいていること ルールは /dev/null にリダイレクトされます デフォルト値: empty.`

clear_env = no

##● Clean環境のアップ

variables_order

variables_order パラメーターについては、別の記事で詳しく説明されていますhttps://www.php.cn/php-weizijiaocheng-429277 .html

一般的なエラーと解決策

リクエスト タイムアウトが設定されていません

# 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 にタイムアウト パラメーターを追加することです。

max_requests パラメータの不適切な設定

● max_requests パラメータの不適切な設定により、断続的な 502 エラーが発生する可能性があります:

pm.max_requests = 1000

# 各子プロセスが再起動される前に処理されるリクエストの数を設定します。これは、メモリ リークがある可能性のあるサードパーティ モジュールに非常に役立ちます。「0」に設定すると、リクエストは常に受け入れられます。PHP_FCGI_MAX_REQUESTS 環境と同等です。変数. デフォルト値 : 0.

この設定は、PHP-CGI プロセスによって処理されるリクエストの数が 500 に累積すると、プロセスが自動的に再起動されることを意味します。

# しかし、なぜプロセスを再起動する必要があるのでしょうか?

# 一般に、プロジェクトでは、PHP のサードパーティ ライブラリをある程度使用します。これらのサードパーティ ライブラリには、メモリ リークの問題がよく発生します。PHP-CGI プロセスが定期的に再起動されないと、必然的にメモリ リークの問題が発生します。メモリ使用量が増加します。そこで、PHP-FPMは、PHP-CGIの管理者として、指定回数リクエストを行ったPHP-CGIプロセスを再起動し、メモリ使用量が増加しないように監視する機能を提供します。

php-fpm のスロー ログ、デバッグ、および例外のトラブルシューティング アーティファクト

● request_slowlog_timeout はタイムアウト パラメーターを設定し、slowlog はスロー ログの保存場所を設定します。tail -f / var/log/www.slow.log で、実行が遅すぎる PHP プロセスを確認できます。

過剰なネットワーク読み取りと遅い Mysql クエリという一般的な問題が確認できます。プロンプト情報に従って問題のトラブルシューティングを行うと、明確な指示が得られます。

以上がPHP7 での php.ini、php-fpm、および www.conf の設定の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はjuejin.imで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。