検索
ホームページバックエンド開発PHPチュートリアルこの記事では、PHP-FMP の詳細な分析を提供します。

この記事では、PHP-FMP について詳しく説明します。一定の参考値があるので、困っている友達が参考になれば幸いです。

この記事では、PHP-FMP の詳細な分析を提供します。

php-fpm とは

  • php-fpm を理解する前に、まず質問について考えてください。ユーザーが PHP コードで Web (niginx サーバー) リクエストを開始した場合、$_POST、$_GET、$_SERVER を通じてリクエスト情報を取得するにはどうすればよいでしょうか?データを組み立てるにはどのような形式を参照すればよいでしょうか?

実際、各動的言語、つまりインタープリタ言語は、サーバー (ここでは Web サーバーを指します) に認識されるように、対応するパーサーを渡す必要があることがわかっていますが、インタープリターとサーバーは特定のプロトコルに従う必要があります。このプロトコルを介してのみ、両者は正常に通信できます。この場合、このプロトコルは CGI プロトコルですが、CGI のメカニズムは、Web リクエストに応答するたびに、新しい処理プロセスが作成され、初期化されます。このプロセスは、リクエストが完了すると強制終了されます。次に、各リクエストは、作成 -> 初期化 -> 終了の 3 つのステップを実行する必要があります。実際、このプロセスはリソースを無駄にするだけでなく、非常に非効率的です。何をするか? FastCGI は、時代に合わせて登場し、CGI の改良版として、ライフサイクル管理が不要な常駐サービスプロセスを起動し、プロセスの作成と終了を繰り返すことを回避します。繰り返し読み込む必要はありません 環境変数を取得します Webリクエストがあるたびに、FastCGIマネージャ、つまり常駐サービスプロセスがCGIインタプリタプロセスを起動します

この記事では、PHP-FMP の詳細な分析を提供します。

  • CGI が利用できるようになったので、php phython などのインタープリタ型言語を独自の言語に合わせて調整する必要があります。その後、PHP 関係者は、PHP の CGI のカスタマイズ版である PHP-CGI を考案しました。
  • しかし、使用するうちに、誰もが PHP-CGI の問題を発見しました。

1. php.ini を変更した後、有効にするために PHP-CGI を再起動する必要があり、スムーズに再起動することはできません。達成される。 2. PHP-CGI を直接強制終了すると、php は実行できなくなりますが、これは明らかに容認できません。 3. これ自体はプロセスを管理せず、要求を解析して結果を返すことしかできません

FastCGI が登場しましたが、PHP の FastCGI ははるかに遅れているのでしょうか? もちろん違います、2004 年までに Andrei という男がNigmatulin 敗者が PHP-FPM を発明しました。PHP-FMP の正式名は PHP-FASTCGI Process Manager です。端的に言えば、FastCGI を PHP 用にカスタマイズしたバージョンです (ここで強調したいのは、PHP-CGI と PHP の両方であることです) -FPM は CGI プロトコルを実装するように設計されており、新しいプロトコルではありません)。実際、今私が言っていなかったことが 1 つあります。インターネット上の多くの人は、PHP-CGI は PHP のためのプログラムであると言っています。 FAST-CGI を管理する PHP-FMP の正式名は PHP-FASTCGI Process であることがわかりました。マネージャーになった後は、自信を持って FAST-CGI にノーと言え、この知識を広めることができます。

php-fpm のプロセスにはマスター (常駐サービス プログラム) とワーカー プロセスが含まれます

マスター プロセス
  • マスターはプロセスのスケジューリングを担当します (たとえば、十分なワーカー プロセスがない場合、子プロセスをフォークします)
  • はリスニング ポート (通常は 9000) を担当します。これは構成で設定できます。もちろん、別の方法もあります。ソケットを使用する方法もあります。netstat -nap | grep マスターのプロセス番号 でポート情報を確認できます (ポート 9000 は実際には tcp の通信方式で、ソケットはUnix ソケット。プロセス間の通信であるため、効率の点では Unix ソケットが明らかに最高ですが、Unix ソケットはサーバー上にある必要があります。異なるマシン間の通信の場合は、やはり tcp 通信を使用する必要があります)

この記事では、PHP-FMP の詳細な分析を提供します。

この記事では、PHP-FMP の詳細な分析を提供します。

  • サーバーからリクエストを受信します
#次のことからわかります。作業の進行状況の名前です。実際の作業クラスです。コードが実際に実行される場所です。

この記事では、PHP-FMP の詳細な分析を提供します。

  • php-fmp の仕組みを見てみましょう。
# socker 通信を例にとると、nginx の conf ファイルには次のような情報が表示されます。

#

        location ~ [^/]\.php(/|$)
        {
            try_files $uri =404;
            fastcgi_pass  unix:/tmp/php-cgi.sock;
            fastcgi_index index.php;
            include fastcgi.conf;
        }

この情報は誰でも理解できると思います、/tmp/ php-cgi.sock は php と nginx ブリッジの間の接続であり、

include fastcgi.conf も見ました。

root@6d05153a8988:/usr/local/nginx/conf# cat fastcgi.conf

fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;
fastcgi_param  QUERY_STRING       $query_string;
fastcgi_param  REQUEST_METHOD     $request_method;
fastcgi_param  CONTENT_TYPE       $content_type;
fastcgi_param  CONTENT_LENGTH     $content_length;

fastcgi_param  SCRIPT_NAME        $fastcgi_script_name;
fastcgi_param  REQUEST_URI        $request_uri;
fastcgi_param  DOCUMENT_URI       $document_uri;
fastcgi_param  DOCUMENT_ROOT      $document_root;
fastcgi_param  SERVER_PROTOCOL    $server_protocol;
fastcgi_param  REQUEST_SCHEME     $scheme;
fastcgi_param  HTTPS              $https if_not_empty;

fastcgi_param  GATEWAY_INTERFACE  CGI/1.1;
fastcgi_param  SERVER_SOFTWARE    nginx/$nginx_version;

fastcgi_param  REMOTE_ADDR        $remote_addr;
fastcgi_param  REMOTE_PORT        $remote_port;
fastcgi_param  SERVER_ADDR        $server_addr;
fastcgi_param  SERVER_PORT        $server_port;
fastcgi_param  SERVER_NAME        $server_name;

# PHP only, required if PHP was built with --enable-force-cgi-redirect
fastcgi_param  REDIRECT_STATUS    200;
fastcgi_param PHP_ADMIN_VALUE "open_basedir=NULL";

を見てみましょう。REMOTE_ADDR などのよく知られたものがいくつかありました。 、REQUEST_URI、理解してください、私たちは渡します $_SERVER によって取得された情報は、この設定ファイルで指定されたものです

php-fmp 設定ファイルを見てみましょう (内部のコメントに注意してください、説明はしません)

root@6d05153a8988:/usr/local/php/etc# cat php-fpm.conf
[global]
pid = /usr/local/php/var/run/php-fpm.pid
error_log = /usr/local/php/var/log/php-fpm.log
log_level = notice

[www]
listen = /tmp/php-cgi.sock
listen.backlog = -1
listen.allowed_clients = 127.0.0.1
listen.owner = www
listen.group = www
listen.mode = 0666
user = www
group = www
# 如何控制子进程,选项有static和dynamic
#区别:
#如果dm设置为 static,那么其实只有pm.max_children这个参数生效。系统会开#启设置数量的php-fpm进程。
#如果dm设置为 dynamic,那么pm.max_children参数失效,后面3个参数生效。
#系统会在php-fpm运行开始 的时候启动pm.start_servers个php-fpm进程,
#然后根据系统的需求动态在pm.min_spare_servers和pm.max_spare_servers之#间调整php-fpm进程数。
pm = dynamic
# 静态方式下开启的php-fpm进程数量
pm.max_children = 20
# 动态方式下的起始php-fpm进程数量
pm.start_servers = 10
# 动态方式下的最小php-fpm进程数
pm.min_spare_servers = 10
# 动态方式下的最大php-fpm进程数量
pm.max_spare_servers = 20
# php-fpm子进程能处理的最大请求数
pm.max_requests = 1024
pm.process_idle_timeout = 10s
request_terminate_timeout = 100
request_slowlog_timeout = 0
slowlog = var/log/slow.log

    php-fpm関連の操作について
INT, TERM QUIT スムーズ終了 USR1 はログ ファイルを再度開きます USR2 はすべてのワーカー プロセスをスムーズにリロードし、構成モジュールとバイナリ モジュールをリロードします

启动: /usr/local/php/sbin/php-fpm查看进程数: ps aux | grep -c php-fpm查看mater进程号:ps aux|grep 'php-fpm: master'|grep -v grep|awk '{print $2}' 或者cat /usr/local/php/var/run/php-fpm.pid

# 强制关闭
pkill php-fpm

kill -INT `cat /usr/local/php/var/run/php-fpm.pid` 
kill -INT [pid]

# 平滑重启 其实就是通过创建新的进程使 php.ini 生效
kill -USR2 `cat /usr/local/php/var/run/php-fpm.pid`
kill -USR2 [pid]
小结

至此,php-fpm 算是说完了,其实通过上面的解说,大家也会明白一个问题,为什么lnmp 承受的并发比lamp高,除了nginx的高性能之外,php-fpm 是不是也是其中的一个原因呢?

推荐学习:《PHP视频教程

以上がこの記事では、PHP-FMP の詳細な分析を提供します。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事は掘金社区で複製されています。侵害がある場合は、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 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。

SublimeText3 Mac版

SublimeText3 Mac版

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

DVWA

DVWA

Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、

EditPlus 中国語クラック版

EditPlus 中国語クラック版

サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

VSCode Windows 64 ビットのダウンロード

VSCode Windows 64 ビットのダウンロード

Microsoft によって発売された無料で強力な IDE エディター