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

PHP 設定 php-fpm 起動パラメータと設定の詳細

Apr 09, 2018 pm 04:28 PM
phpphp-fpmパラメータ

php-fpm 起動パラメータと重要な設定の詳細な説明は、言うまでもなく、PHP 開発を行うすべての学生が使用する必要があります。

いくつかのディレクトリに同意します

/usr/local/php/sbin/php-fpm
/usr/local/php/etc/php-fpm.conf
/usr/local/php/etc/php.ini
1 . 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`

#重启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
#错误级别. 可用级别为: alert(必须立即处理), error(错误情况), warning(警告情况), notice(一般重要信息), debug(调试信息). 默认: notice.

emergency_restart_threshold = 60
emergency_restart_interval = 60s
#表示在emergency_restart_interval所设值内出现SIGSEGV或者SIGBUS错误的php-cgi进程数如果超过 emergency_restart_threshold个,php-fpm就会优雅重启。这两个选项一般保持默认值。

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
#backlog数,-1表示无限制,由操作系统决定,此行注释掉就行。backlog含义参考:http://www.3gyou.cc/?p=41

listen.allowed_clients = 127.0.0.1
#允许访问FastCGI进程的IP,设置any为不限制IP,如果要设置其他主机的nginx也能访问这台FPM进程,listen处要设置成本地可被访问的IP。默认值是any。每个地址是用逗号分隔. 如果没有设置或者为空,则允许任何服务器请求连接

listen.owner = www
listen.group = www
listen.mode = 0666
#unix socket设置选项,如果使用tcp方式访问,这里注释即可。

user = www
group = www
#启动进程的帐户和组

pm = dynamic #对于专用服务器,pm可以设置为static。
#如何控制子进程,选项有static和dynamic。如果选择static,则由pm.max_children指定固定的子进程数。如果选择dynamic,则由下开参数决定:
pm.max_children #,子进程最大数
pm.start_servers #,启动时的进程数
pm.min_spare_servers #,保证空闲进程数最小值,如果空闲进程小于此值,则创建新的子进程
pm.max_spare_servers #,保证空闲进程数最大值,如果空闲进程大于此值,此进行清理

pm.max_requests = 1000
#设置每个子进程重生之前服务的请求数. 对于可能存在内存泄漏的第三方模块来说是非常有用的. 如果设置为 '0' 则一直接受请求. 等同于 PHP_FCGI_MAX_REQUESTS 环境变量. 默认值: 0.

pm.status_path = /status
#FPM状态页面的网址. 如果没有设置, 则无法访问状态页面. 默认值: none. munin监控会使用到

ping.path = /ping
#FPM监控页面的ping网址. 如果没有设置, 则无法访问ping页面. 该页面用于外部检测FPM是否存活并且可以响应请求. 请注意必须以斜线开头 (/)。

ping.response = pong
#用于定义ping请求的返回相应. 返回为 HTTP 200 的 text/plain 格式文本. 默认值: pong.

request_terminate_timeout = 0
#设置单个请求的超时中止时间. 该选项可能会对php.ini设置中的'max_execution_time'因为某些特殊原因没有中止运行的脚本有用. 设置为 '0' 表示 'Off'.当经常出现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 =
#设置启动目录,启动时会自动Chdir到该目录. 所定义的目录需要是绝对路径. 默认值: 当前目录,或者/目录(chroot时)

catch_workers_output = yes
#重定向运行过程中的stdout和stderr到主要的错误日志文件中. 如果没有设置, stdout 和 stderr 将会根据FastCGI的规则被重定向到 /dev/null . 默认值: 空.

三、一般的なエラーと解決策のコレクション

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    //设置一个超时时间,单位为秒
    )
));

file_get_contents($str, 0, $ctx);
2、max_requests パラメータが不適切に構成されているため、断続的な 502 エラーが発生する可能性があります:


コードをコピー

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

pm.max_requests = 1000

再生成前に各子プロセスを設定します。これは、メモリ リークが発生する可能性のあるサードパーティ モジュールに非常に役立ちます。デフォルト値は、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 クエリという一般的な問題を確認できます。プロンプト情報に従って問題をトラブルシューティングすると、明確な指示が得られます。

以上がPHP 設定 php-fpm 起動パラメータと設定の詳細の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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

依存関係の依存性、テスト可能性、および維持可能性の依存性の依存性の依存性、および維持可能性は、エクステルンド依存性を維持する可能性があります

最高のPHPパフォーマンス最適化手法最高のPHPパフォーマンス最適化手法May 07, 2025 pm 03:05 PM

PHPパフォーマンスの最適化は、次の手順を通じて実現できます。1)スクリプトの上部にrequire_onceまたはinclude_onceを使用して、ファイルの負荷数を減らすことができます。 2)プリプロセシングステートメントとバッチ処理を使用して、データベースクエリの数を減らします。 3)OpCodeキャッシュのOpCacheを構成します。 4)PHP-FPM最適化プロセス管理を有効にして構成します。 5)CDNを使用して静的リソースを配布します。 6)コードパフォーマンス分析には、XdebugまたはBlackfireを使用します。 7)配列などの効率的なデータ構造を選択します。 8)最適化実行のためのモジュラーコードを記述します。

PHPパフォーマンスの最適化:OpCodeキャッシングの使用PHPパフォーマンスの最適化:OpCodeキャッシングの使用May 07, 2025 pm 02:49 PM

opcodeCachingsificlyprovesppherformanceBycachingCompiledCode、reducingServerloadandResponsetimes.1)itStoresPhpCodeInMemory、バイパス補助補強団体

PHP依存性インジェクション:コードの維持可能性を高めますPHP依存性インジェクション:コードの維持可能性を高めますMay 07, 2025 pm 02:37 PM

依存関係注射は、PHPでの外部注入を通じてオブジェクトの依存関係を提供し、コードの保守性と柔軟性を向上させます。その実装方法には、1。コンストラクターインジェクション、2。SET値インジェクション、3。インターフェイスインジェクション。依存関係の注入を使用すると、テスト可能性と柔軟性が向上する可能性がありますが、複雑さとパフォーマンスのオーバーヘッドの増加の可能性に注意を払う必要があります。

PHPに依存関係注入を実装する方法PHPに依存関係注入を実装する方法May 07, 2025 pm 02:33 PM

PHPでの依存関係注射(DI)の実装は、手動注入またはDIコンテナを使用して実行できます。 1)手動注入は、ロガーを注入するユーザーサービスクラスなど、コンストラクターを介して依存関係を渡します。 2)DIコンテナを使用して、コンテナクラスなどの依存関係を自動的に管理し、ロガーとユーザーサービスを管理します。 DIを実装すると、コードの柔軟性とテスト能力が向上する可能性がありますが、オーバーインジェクションやサービスロケーターアンチモードなどのトラップに注意を払う必要があります。

unset()とsession_destroy()の違いは何ですか?unset()とsession_destroy()の違いは何ですか?May 04, 2025 am 12:19 AM

thedifferencebetferencefued fieneunset()andsession_destroy()isthatunset()clearsspecificsessionvariablesはsessionactiveであり、ssession_destroy()ターミナテンテンセッション

負荷分散のコンテキストでの粘着性セッション(セッションアフィニティ)とは何ですか?負荷分散のコンテキストでの粘着性セッション(セッションアフィニティ)とは何ですか?May 04, 2025 am 12:16 AM

StickysionsionsureuserRequestsoredtotheSameserverforsessiondataconsistency.1)Sessionidedificationisionidificationsisignivisionsignsignsuserstoserversusing okiesorurlmodifications.2)CondingRoutingDirectSSubSubSubsEntRequestStotheSameserver.3)LoadBalancingDistributeNewuser

PHPで利用可能なさまざまなセッション保存ハンドラーは何ですか?PHPで利用可能なさまざまなセッション保存ハンドラーは何ですか?May 04, 2025 am 12:14 AM

phpoffersvarioussionsionsavehandlers:1)ファイル:デフォルト、simplebutmaybottleneckonhigh-trafficsites.2)memcached:high-performance、yealforspeed-criticalapplications.3)redis:similartomcached、witordededpersistence.4)データベースの提供

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 英語版

SublimeText3 英語版

推奨: Win バージョン、コードプロンプトをサポート!

Dreamweaver Mac版

Dreamweaver Mac版

ビジュアル Web 開発ツール

MantisBT

MantisBT

Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

メモ帳++7.3.1

メモ帳++7.3.1

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

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール