検索
ホームページバックエンド開発PHPチュートリアルPHPのPHP-FPMとは何かを詳しく解説!用途は何ですか?

PHPのPHP-FPMとは何かを詳しく解説!用途は何ですか?

PHP-FPM (PHP FastCGI Process Manager) とは、PHP FastCGI プロセス マネージャーを意味します。PHP プロセス プールを管理し、Web サーバーからのリクエストを受け入れるために使用されるソフトウェアです。

機能

PHP-FPM は、メモリとプロセスを効果的に制御し、PHP 設定をスムーズにリロードできる、より優れた PHP プロセス管理方法を提供します。 [関連する推奨事項: PHP チュートリアル ]

(1). php-fpm

fpm が表示されるのは、すべて php-fastcgi のせいです。 php-fastcgi をうまく管理するために実装されたプログラム

#(2). php-fastcgi とは

#php-fastcgi は、php リクエストを解析して返すだけの cgi プログラムです。管理されません (したがって php-fpm)。

(3)なぜphp-cgiとしないのか

実はphp-fastcgiが登場する前からphp-cgiがありましたが、実行効率が低かったためphpに置き換えられました。 -fastcgi 。

(4)fastcgi と cgi の違いは何ですか?

親愛なる皆さん、その違いは非常に大きいです. サービス Web サーバー (nginx) がリクエストを配布するとき、サフィックスを照合することでリクエストが動的 php リクエストであることを認識し、リクエストを php に転送します。

CGI の時代は比較的保守的な考え方で、リクエストが来るたびに php.ini の基本設定情報を読み込み、実行環境を初期化し、プロセスを作成するというものでした。構成、環境の初期化、データの返し、プロセスの終了など、時間が経つにつれて、プロセスを開始する作業は退屈で特に疲れるものになります。

PHP 5 の時代になると、誰もがこの作業方法に特に嫌悪感を抱き、怠惰になりたい人は、CGI に一度に 1 つのメイン プロセス (マスター) を開始させて、読み取り専用にしますか? 構成を一度取得して、複数のワーカー プロセスを開始します。リクエストが来ると、作業の重複を避けるために、リクエストはマスター経由でワーカーに渡されます。そこで、fastcgi が誕生しました。

(5) Fastcgi は非常に優れていますが、開始したワーカーがなくなったらどうすればよいですか?

十分なワーカーがない場合、マスターは構成内の情報を通じて動的にワーカーを開始し、アイドル状態になったワーカーを取り戻すことができます


(6) まだ意味がわかりませんphp-fpm とは?

マスター プロセスと複数のワーカー プロセスを開始するプログラムを管理するためのものです。PHP-FPM は、処理のために HTTP リクエストを 1 つ以上の子プロセスに転送するタイミングと方法を制御するメイン プロセスを作成します。


PHP-FPM メイン プロセスは、

PHP 子プロセスをいつ作成するか (Web アプリケーションからのより多くのトラフィックを処理する)、破棄するか (子プロセスの実行時間が長すぎるか、不要になるか) も制御します。 PHP-FPM プロセス プール内の各プロセスは、単一の HTTP リクエストよりも長く存在し、10、50、100、500、またはそれ以上の HTTP リクエストを処理できます。

インストール

PHP 5.3.3 以降、PHP のコア コードに php-fpm が組み込まれました。したがって、php-fpm を個別にダウンロードしてインストールする必要はありません。 php で php-fpm をサポートしたい場合は、php ソース コードをコンパイルするときに --enable-fpm を指定するだけです。

グローバル構成

Centos では、PHP-FPM の主な構成ファイルは /etc/php7/php-fpm.conf です。 指定されたサブプロセスが指定された期間内に失敗すると、PHP-FPM が再起動します:

#在指定的一段时间内,如果失效的PHP-FPM子进程数超过这个值,PHP-FPM主进程将优雅重启。
emergency_restart_threshold = 10

#设定emergency_restart_interval 设置采用的时间跨度。
emergency_restart_interval = 1m

プロセス プールの構成

PHP-FPM 構成ファイルの残りの部分は、「プール定義」と呼ばれる領域です。この領域では、各 PHP-FPM プロセス プールのユーザー設定を構成します。 PHP-FPM プロセス プールは、関連する一連の PHP サブプロセスです。 通常、PHP アプリケーションには独自のプロセス プールがあります

Centos では、PHP-FPM メイン構成ファイルの先頭にプロセス プール定義ファイルを導入しています:

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

www.conf は、PHP-FPM プロセス プールのデフォルト構成ファイル です。

user= nobody
#拥有这个 PHP-FPM进程池中子进程的系统用户。要把这个设置的值设用的非根用户的用户名。

group = nobody
#拥有这个 PHP-FPM进程池中子进程的系统用户组。要把这个设置的值设应用的非根用户所属的用户组名。

listen=[::]]:9000
#PHP-FPM进程池监听的IP地址和端口号,让 PHP-FPM 只接受 nginx从这里传入的请求。

listen. allowed clients =127.0.0.1
#可以向这个 PHP-FPM进程池发送请求的IP地址(一个或多个)。

pm.max children =51
#这个设置设定任何时间点 PHP-FPM进程池中最多能有多少个进程。这个设置没有绝对正确的值,你应该测试你的PHP应用,确定每个PHP进程需要使用多少内存,然后把这个设置设为设备可用内存能容纳的PHP进程总数。对大多数中小型PHP应用来说,每个PHP进程要使用5~15MB内存(具体用量可能有差异)。 假设我们使用设备为这个PHP-FPM进程池分配了512MB可用内存,那么可以把这个设置设为(512MB总内存)/(每个进程使用10MB) = 51个进程。

...

編集して保存し、PHP-FPM メイン プロセスを再起動します:

sudo systemctl restart php-fpm.service

PHP-FPM プロセス プールの構成の詳細については、http://php.net/manual/ を参照してください。 install.fpm.configuration.php

参考社内開発環境

テスト環境の構成は以下のとおりです。

[www]
user = nobody               #进程的发起用户和用户组,用户user是必须设置,group不是  nobody 任意用户
group = nobody

listen = [::]:9000          #监听ip和端口,[::] 代表任意ip
chdir = /app                #在程序启动时将会改变到指定的位置(这个是相对路径,相对当前路径或chroot后的“/”目录) 

pm = dynamic                #选择进程池管理器如何控制子进程的数量  #static: 对于子进程的开启数路给定一个锁定的值(pm.max_children) #dynamic: 子进程的数目为动态的,它的数目基于下面的指令的值(以下为dynamic适用参数)
pm.max_children = 16        #同一时刻能够存货的最大子进程的数量
pm.start_servers = 4        #在启动时启动的子进程数量
pm.min_spare_servers = 2    #处于空闲"idle"状态的最小子进程,如果空闲进程数量小于这个值,那么相应的子进程会被创建
pm.max_spare_servers = 16   #最大空闲子进程数量,空闲子进程数量超过这个值,那么相应的子进程会被杀掉。
catch_workers_output = Yes  #将worker的标准输出和错误输出重定向到主要的错误日志记录中,如果没有设置,根据FastCGI的指定,将会被重定向到/dev/null上
本番環境の構成:

例としてリクエストを PHP-FPM

nginx に転送します:

server {
       listen       83;
       server_name mobile.com;
       root /app/mobile/web/;

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   /usr/share/nginx/html;
        }

        location / {
                index  index.html index.htm index.php;
                # Redirect everything that isn't a real file to index.php
                try_files $uri $uri/ /index.php$is_args$args;
        }

        #把HTTP请求转发给PHP-FPM进程池处理
        location ~ .*\.php                 include fastcgi_params;
                fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                fastcgi_pass   192.168.33.30:9000;      #监听9000端口
                fastcgi_index  index.php;
                try_files $uri =404;
                #include fastcgi.conf;
        }
        location ~ /\.(ht|svn|git) {
                deny all;
        }
        access_log  /app/wwwlogs/access.log;
        error_log   /app/wwwlogs/error.log;
}
php-fpm の開始、再起動、操作の終了

Start php-fpm:

/usr/sbin/php-fpm
或
/usr/local/php/sbin/php-fpm
php 5.3.3 以降 php-fpm はサポートされなくなりました/usr/local/php/ は sbin/php-fpm (start|stop|reload) やその他のコマンドの前に php-fpm にあったので、この昔ながらのコマンドはもう見ないでください。シグナル制御を使用する必要があります。 マスター プロセスは次の信号を理解できます

INT, TERM すぐに終了します

QUIT スムーズに終了します

USR1 ログ ファイルを再度開きます

USR2 すべてのワーカー プロセスをスムーズにリロードします設定モジュールとバイナリ モジュールをリロードします。

簡単な直接再起動方法:

最初に php-fpm のマスター プロセス番号を確認します

# ps aux|grep php-fpm
root     21891  0.0  0.0 112660   960 pts/3    R+   16:18   0:00 grep --color=auto php-fpm
root     42891  0.0  0.1 182796  1220 ?        Ss   4月18   0:19 php-fpm: master process (/usr/local/php/etc/php-fpm.conf)
nobody   42892  0.0  0.6 183000  6516 ?        S    4月18   0:07 php-fpm: pool www
nobody   42893  0.0  0.6 183000  6508 ?        S    4月18   0:17 php-fpm: pool www

再起動 php-fpm:
kill -USR2 42891

上記のスキームでは通常、php-fpm.pid ファイルは生成されません。php-fpm.pid を生成したい場合は、次の解決策を使用してください:

上面master进程可以看到,matster使用的是/usr/local/php/etc/php-fpm.conf这个配置文件,cat /usr/local/php/etc/php-fpm.conf 发现:

[global]
; Pid file
; Note: the default prefix is /usr/local/php/var
; Default Value: none
;pid = run/php-fpm.pid

pid文件路径应该位于/usr/local/php/var/run/php-fpm.pid,由于注释掉,所以没有生成,我们把注释去除,再kill -USR2 42891 重启php-fpm,便会生成pid文件,下次就可以使用以下命令重启,关闭php-fpm了:

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'

相关学习推荐:PHP编程从入门到精通

以上がPHPのPHP-FPMとは何かを詳しく解説!用途は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事はcnblogsで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。
PHPおよびPython:さまざまなパラダイムが説明されていますPHPおよびPython:さまざまなパラダイムが説明されていますApr 18, 2025 am 12:26 AM

PHPは主に手順プログラミングですが、オブジェクト指向プログラミング(OOP)もサポートしています。 Pythonは、OOP、機能、手続き上のプログラミングなど、さまざまなパラダイムをサポートしています。 PHPはWeb開発に適しており、Pythonはデータ分析や機械学習などのさまざまなアプリケーションに適しています。

PHPとPython:彼らの歴史を深く掘り下げますPHPとPython:彼らの歴史を深く掘り下げますApr 18, 2025 am 12:25 AM

PHPは1994年に発信され、Rasmuslerdorfによって開発されました。もともとはウェブサイトの訪問者を追跡するために使用され、サーバー側のスクリプト言語に徐々に進化し、Web開発で広く使用されていました。 Pythonは、1980年代後半にGuidovan Rossumによって開発され、1991年に最初にリリースされました。コードの読みやすさとシンプルさを強調し、科学的コンピューティング、データ分析、その他の分野に適しています。

PHPとPythonの選択:ガイドPHPとPythonの選択:ガイドApr 18, 2025 am 12:24 AM

PHPはWeb開発と迅速なプロトタイピングに適しており、Pythonはデータサイエンスと機械学習に適しています。 1.PHPは、単純な構文と迅速な開発に適した動的なWeb開発に使用されます。 2。Pythonには簡潔な構文があり、複数のフィールドに適しており、強力なライブラリエコシステムがあります。

PHPとフレームワーク:言語の近代化PHPとフレームワーク:言語の近代化Apr 18, 2025 am 12:14 AM

PHPは、多数のWebサイトとアプリケーションをサポートし、フレームワークを通じて開発ニーズに適応するため、近代化プロセスで依然として重要です。 1.PHP7はパフォーマンスを向上させ、新機能を紹介します。 2。Laravel、Symfony、Codeigniterなどの最新のフレームワークは、開発を簡素化し、コードの品質を向上させます。 3.パフォーマンスの最適化とベストプラクティスは、アプリケーションの効率をさらに改善します。

PHPの影響:Web開発などPHPの影響:Web開発などApr 18, 2025 am 12:10 AM

phphassiblasifly-impactedwebdevevermentandsbeyondit.1)itpowersmajorplatformslikewordpratsandexcelsindatabase interactions.2)php'sadaptableability allowsitale forlargeapplicationsusingframeworkslikelavel.3)

スカラータイプ、リターンタイプ、ユニオンタイプ、ヌル可能なタイプなど、PHPタイプのヒントはどのように機能しますか?スカラータイプ、リターンタイプ、ユニオンタイプ、ヌル可能なタイプなど、PHPタイプのヒントはどのように機能しますか?Apr 17, 2025 am 12:25 AM

PHPタイプは、コードの品質と読みやすさを向上させるためのプロンプトがあります。 1)スカラータイプのヒント:php7.0であるため、基本データ型は、int、floatなどの関数パラメーターで指定できます。 3)ユニオンタイプのプロンプト:PHP8.0であるため、関数パラメーターまたは戻り値で複数のタイプを指定することができます。 4)Nullable Typeプロンプト:null値を含めることができ、null値を返す可能性のある機能を処理できます。

PHPは、オブジェクトのクローニング(クローンキーワード)と__Clone Magicメソッドをどのように処理しますか?PHPは、オブジェクトのクローニング(クローンキーワード)と__Clone Magicメソッドをどのように処理しますか?Apr 17, 2025 am 12:24 AM

PHPでは、クローンキーワードを使用してオブジェクトのコピーを作成し、\ _ \ _クローンマジックメソッドを使用してクローン動作をカスタマイズします。 1.クローンキーワードを使用して浅いコピーを作成し、オブジェクトのプロパティをクローン化しますが、オブジェクトのプロパティはクローニングしません。 2。\ _ \ _クローン法は、浅いコピーの問題を避けるために、ネストされたオブジェクトを深くコピーできます。 3.クローニングにおける円形の参照とパフォーマンスの問題を避けるために注意し、クローニング操作を最適化して効率を向上させます。

PHP対Python:ユースケースとアプリケーションPHP対Python:ユースケースとアプリケーションApr 17, 2025 am 12:23 AM

PHPはWeb開発およびコンテンツ管理システムに適しており、Pythonはデータサイエンス、機械学習、自動化スクリプトに適しています。 1.PHPは、高速でスケーラブルなWebサイトとアプリケーションの構築においてうまく機能し、WordPressなどのCMSで一般的に使用されます。 2。Pythonは、NumpyやTensorflowなどの豊富なライブラリを使用して、データサイエンスと機械学習の分野で驚くほどパフォーマンスを発揮しています。

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衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

WebStorm Mac版

WebStorm Mac版

便利なJavaScript開発ツール

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

AtomエディタMac版ダウンロード

AtomエディタMac版ダウンロード

最も人気のあるオープンソースエディター

DVWA

DVWA

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

Safe Exam Browser

Safe Exam Browser

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