php-fpm を最適化する必要があるのはなぜですか?最適化するにはどうすればよいですか?
php-fpm を最適化する必要があるのはなぜですか?最適化するにはどうすればよいですか? は広く普及しており、インターネット Web アプリケーションで最も広く使用されている言語であると言えます。
しかし、その高いパフォーマンスは、特に同時実行性の高いシステムに関してはあまり知られていません。だからこそ、そのような特定のユースケースでは、Node (はい、言語ではないことはわかっています)、Go、Elixir などの言語に引き継がれています。
とはいえ、サーバー上の php-fpm を最適化する必要があるのはなぜですか?最適化するにはどうすればよいですか? パフォーマンスを向上させるためにできることはたくさんあります。この記事は主に php-fpm
に焦点を当てています。Nginx を使用している場合、これはサーバーのデフォルト構成です。
php-fpm
が何かご存知の場合は、最適化セクションに直接ジャンプしてください。
php-fpm とは何ですか?
多くの開発者は DevOps の知識にあまり興味がありません。また、興味を持っている人でも、その基礎となる原理を知っている人はほとんどいません。 。興味深いことに、ブラウザが php-fpm を最適化する必要があるのはなぜですか?最適化するにはどうすればよいですか? を実行しているサーバーにリクエストを送信するとき、php-fpm を最適化する必要があるのはなぜですか?最適化するにはどうすればよいですか? がリクエストを処理する最初のサービスではなく、HTTP サーバー、Apache と Nginx が最も重要な 2 つのサービスです。 「Web サーバー」は、php-fpm を最適化する必要があるのはなぜですか?最適化するにはどうすればよいですか? との通信方法を決定し、リクエストのタイプ、データ、ヘッダー情報を php-fpm を最適化する必要があるのはなぜですか?最適化するにはどうすればよいですか? プロセスに渡します。
上の図は、php-fpm を最適化する必要があるのはなぜですか?最適化するにはどうすればよいですか? プロジェクトのリクエストとレスポンスのライフ サイクルです (画像ソース: ProinerTech)
最新の php-fpm を最適化する必要があるのはなぜですか?最適化するにはどうすればよいですか? アプリケーションでは、「ファイルの検索」 " の部分は index.php
ファイルで、これはすべてのリクエストを処理するためにサーバー構成ファイルで構成されたプロキシです。
Web サーバーが php-fpm を最適化する必要があるのはなぜですか?最適化するにはどうすればよいですか? に接続する正確な方法は、最近進化しており、すべての詳細を掘り下げると、この記事の長さは爆発的に長くなります。しかし、大まかに言えば、Apache が Web サーバーとして選ばれていた時代には、php-fpm を最適化する必要があるのはなぜですか?最適化するにはどうすればよいですか? はサーバー内のモジュールとして組み込まれていました。
したがって、リクエストが受信されるたびに、サーバーは新しいプロセスを開始します。このプロセスには自動的に php-fpm を最適化する必要があるのはなぜですか?最適化するにはどうすればよいですか? が含まれ、リクエストが実行されます。このメソッドは mod_php
と呼ばれ、「モジュールとしての php-fpm を最適化する必要があるのはなぜですか?最適化するにはどうすればよいですか?」の略です。このアプローチには限界がありますが、Nginx と php-fpm
はそれを克服します。
php-fpm
では、php-fpm を最適化する必要があるのはなぜですか?最適化するにはどうすればよいですか? を管理する責任はサーバー内の php-fpm を最適化する必要があるのはなぜですか?最適化するにはどうすればよいですか? プログラムにあります。言い換えれば、Web サーバー (この場合は Nginx) は、データの送受信方法を知っている限り、php-fpm を最適化する必要があるのはなぜですか?最適化するにはどうすればよいですか? がどこでどのように実行されているかを気にしません。この場合、必要に応じて、受信リクエストに対するサブ php-fpm を最適化する必要があるのはなぜですか?最適化するにはどうすればよいですか? プロセスを管理する別のサーバーとして php-fpm を最適化する必要があるのはなぜですか?最適化するにはどうすればよいですか? を扱うことができます (つまり、リクエストをサーバーに送信し、そのリクエストがサーバーで受信されてサーバーに渡されます。これはクレイジーです! :- P)。
Nginx
を使用した場合は、次のコードが表示されます:
location ~ \.php$ { try_files $uri =404; fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_pass unix:/run/php/php7.2-fpm.sock; fastcgi_index index.php; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; }
この行: fastcgi_pass unix:/run/php/php7.2 - fpm.sock;
これは、php7.2-fpm.sock
の socket
を通じて php-fpm を最適化する必要があるのはなぜですか?最適化するにはどうすればよいですか? プロセスと通信するように Nginx に指示します。したがって、受信リクエストごとに、Nginx はこのファイルを通じてデータを書き込み、出力を受信した後、それをブラウザーに送り返します。
これは、実行方法に関して最も完全または正確ではありませんが、ほとんどの DevOps タスクに対して完全に正確であることをもう一度強調しなければなりません。
それはさておき、これまでに学んだことを復習しましょう:
- php-fpm を最適化する必要があるのはなぜですか?最適化するにはどうすればよいですか? はブラウザーから送信されたリクエストを直接受け取りません。 Nginx などの Web サーバーが最初にそれを傍受します。
- Web サーバーは、php-fpm を最適化する必要があるのはなぜですか?最適化するにはどうすればよいですか? プロセスに接続し、すべてのリクエスト データを php-fpm を最適化する必要があるのはなぜですか?最適化するにはどうすればよいですか? に渡す方法 (すべてを貼り付ける方法) を認識しています。
- php-fpm を最適化する必要があるのはなぜですか?最適化するにはどうすればよいですか? はその役割を完了した後、応答を Web サーバーに送り返し、Web サーバーはそれをクライアント (ほとんどの場合、ブラウザ) に送り返します。
フローチャートは次のとおりです:
php-fpm を最適化する必要があるのはなぜですか?最適化するにはどうすればよいですか? と Nginx はどのように連携しますか? (画像出典: Data Dog)
ここまでは順調ですが、重要な質問は次のとおりです。php-fpm を最適化する必要があるのはなぜですか?最適化するにはどうすればよいですか?-FPM とは正確には何ですか?
FPM
php-fpm を最適化する必要があるのはなぜですか?最適化するにはどうすればよいですか? では「Fast」の略です。プロセス マネージャー」という派手な説明は、サーバー上で実行されている php-fpm を最適化する必要があるのはなぜですか?最適化するにはどうすればよいですか? が単一のプロセスではなく、この FPM プロセス マネージャーによって派生、制御、終了される多数の php-fpm を最適化する必要があるのはなぜですか?最適化するにはどうすればよいですか? プロセスであることを意味します。 Web サーバーがリクエストを渡すのはこのプロセス マネージャーです。
php-fpm を最適化する必要があるのはなぜですか?最適化するにはどうすればよいですか?-FPM はそれ自体がまったくのウサギの穴なので、必要に応じて自由に探索してください。ただし、ここでの目的のためには、これらの説明で十分です。 ?
なぜ php-fpm を最適化する必要があるのですか?
一般に、通常の操作条件では、なぜ最適化を検討する必要があるのでしょうか?現状のままにしておいてはいかがでしょうか。
皮肉なことに、私は通常、ほとんどのユースケースに対してアドバイスを提供します。セットアップが正常に機能し、特別な使用例がない場合は、デフォルト設定を使用してください。ただし、1 台のマシンを超えた拡張を検討している場合は、1 台のマシンから最大限の処理能力を引き出すことが不可欠です。そうすることで、サーバーの支出を半分 (またはそれ以上!) に削減できるからです。
要说明的另一件事情是,Nginx是为处理巨大的工作负载而构建的。 它能够同时处理成千上万的连接,但是如果您的php-fpm を最適化する必要があるのはなぜですか?最適化するにはどうすればよいですか?设置不合理,那么您将浪费很多资源,因为Nginx必须等待php-fpm を最適化する必要があるのはなぜですか?最適化するにはどうすればよいですか?完成当前处理之后才可以接受下一个请求,最终Nginx不能为您的服务提供任何优势!
所以,接下来让我们看看尝试优化 php-fpm
时我们到底要优化什么。
如何优化 php-fpm を最適化する必要があるのはなぜですか?最適化するにはどうすればよいですか?-FPM ?
php-fpm
的配置文件在不同服务器上的位置可能不同,因此您需要做一些调查来确定它的位置。在 UNIX 上,你可以使用 find 命令。在我的 Ubuntu 上,它的路径是 /etc/php/7.2/fpm/php-fpm.conf
。当然,7.2是我正在运行的 php-fpm を最適化する必要があるのはなぜですか?最適化するにはどうすればよいですか? 版本。
下面是这个文件的前几行代码:
;;;;;;;;;;;;;;;;;;;;; ; FPM Configuration ; ;;;;;;;;;;;;;;;;;;;;; ; All relative paths in this configuration file are relative to php-fpm を最適化する必要があるのはなぜですか?最適化するにはどうすればよいですか?'s install ; prefix (/usr). This prefix can be dynamically changed by using the ; '-p' argument from the command line. ;;;;;;;;;;;;;;;;;; ; Global Options ; ;;;;;;;;;;;;;;;;;; [global] ; Pid file ; Note: the default prefix is /var ; Default Value: none pid = /run/php/php7.2-fpm.pid ; Error log file ; If it's set to "syslog", log is sent to syslogd instead of being written ; into a local file. ; Note: the default prefix is /var ; Default Value: log/php-fpm.log error_log = /var/log/php7.2-fpm.log
很明显:这一行 pid = /run/php/php7.2-fpm.pid
告诉我们哪个文件包含了 php-fpm
进程的进程 id。
我们还看到 /var/log/php7.2-fpm.log
是 php-fpm
存储日志的地方。
在这个文件中,像下面这样添加三个变量:
emergency_restart_threshold 10 emergency_restart_interval 1m process_control_timeout 10s
前两个设置是警告性的,它们告诉 php-fpm
进程,如果10个子进程在一分钟内失败,主 php-fpm
进程应该重新启动自己。
这听起来可能不够稳健,但是 php-fpm を最適化する必要があるのはなぜですか?最適化するにはどうすればよいですか? 是一个短暂的进程,它会泄漏内存,所以在出现高故障时重新启动主进程可以解决很多问题。
第三个选项是 process_control_timeout
,它告诉子进程在执行从父进程接收到的信号之前需要等待这么长的时间。这个设置是非常有用的。例如,当父进程发送终止信号时,子进程正在处理某些事情的时候。十秒的时间,他们会有一个更好的机会完成任务并且优雅地退出。
令人惊讶的是,这 不是 php-fpm 的核心配置!这是因为,为了 web 请求服务,php-fpm
创建了一个新的进程池,它将具有一个单独的配置。在我的例子中,进程池的名称是 www
,我想编辑的文件是 /etc/php/7.2/fpm/pool.d/www.conf
。
让我们来看看文件的内容:
; Start a new pool named 'www'. ; the variable $pool can be used in any directive and will be replaced by the ; pool name ('www' here) [www] ; Per pool prefix ; It only applies on the following directives: ; - 'access.log' ; - 'slowlog' ; - 'listen' (unixsocket) ; - 'chroot' ; - 'chdir' ; - 'php_values' ; - 'php_admin_values' ; When not set, the global prefix (or /usr) applies instead. ; Note: This directive can also be relative to the global prefix. ; Default Value: none ;prefix = /path/to/pools/$pool ; Unix user/group of processes ; Note: The user is mandatory. If the group is not set, the default user's group ; will be used. user = www-data group = www-data
快速浏览一下上面代码片段的末尾,您就会明白为什么服务器进程以 www-data
的形式运行了。如果您在设置网站时遇到文件权限问题,您可能要将目录的所有者或组更改为 www-data
,从而允许php-fpm を最適化する必要があるのはなぜですか?最適化するにはどうすればよいですか?进程写入日志文件和上传文档等。
最后,我们到达了问题的根源,流程管理器 (pm) 设置。一般情况下,默认值是这样的:
pm = dynamic pm.max_children = 5 pm.start_servers = 3 pm.min_spare_servers = 2 pm.max_spare_servers = 4 pm.max_requests = 200
那么,这里的 「dynamic(动态)」是什么意思呢?我认为官方文档最好地解释了这一点(我的意思是,这应该已经是您正在编辑的文件的一部分,但是我在这里复制了它,以防它不是):
; Choose how the process manager will control the number of child processes. ; Possible Values: ; static - a fixed number (pm.max_children) of child processes; ; dynamic - the number of child processes are set dynamically based on the ; following directives. With this process management, there will be ; always at least 1 children. ; pm.max_children - the maximum number of children that can ; be alive at the same time. ; pm.start_servers - the number of children created on startup. ; pm.min_spare_servers - the minimum number of children in 'idle' ; state (waiting to process). If the number ; of 'idle' processes is less than this ; number then some children will be created. ; pm.max_spare_servers - the maximum number of children in 'idle' ; state (waiting to process). If the number ; of 'idle' processes is greater than this ; number then some children will be killed. ; ondemand - no children are created at startup. Children will be forked when ; new requests will connect. The following parameter are used: ; pm.max_children - the maximum number of children that ; can be alive at the same time. ; pm.process_idle_timeout - The number of seconds after which ; an idle process will be killed. ; Note: This value is mandatory.
由此可见,有三个可用值:
- Static: 无论什么情况,都会保持一个固定的php-fpm を最適化する必要があるのはなぜですか?最適化するにはどうすればよいですか?进程数量。
-
Dynamic: 我们需要指定
php-fpm
在任何给定时间点会保持活动的最小以及最大进程数量。 - ondemand: 按照需求创建和销毁进程。
那这些设置有什么影响呢?
简而言之,如果你有个小流量的网站,“dynamic”设置在大多数时间内都是一种资源的浪费。假设你的pm.min_spare_servers
设置成了3,那会有三个php-fpm を最適化する必要があるのはなぜですか?最適化するにはどうすればよいですか?进程会被创建并保持运行,甚至是网站没有流量时。这种情况下,“ondemand” 就是个更好的选择, 可以让系统决定何时启动新的进程。
另一方面, 大流量 或者必须快速响应的网站将在这种情况下被惩罚。 最好避免创建新的 php-fpm を最適化する必要があるのはなぜですか?最適化するにはどうすればよいですか? 进程的额外开销,使其成为池的一部分并对其进行监控。
使用 pm = static
固定子进程的数量,使最大的系统资源用于服务请求而不是管理 php-fpm を最適化する必要があるのはなぜですか?最適化するにはどうすればよいですか?。假如你确定走这条路,注意它有其指导方针和陷阱.关于它的一篇相当密集但非常有用的文章是 这篇 。
写在最后
由于有关网络性能的文章可能会引发争论或使人们感到困惑,因此在结束本文之前,我觉得需要讲几句话。 性能调优既涉及系统知识,也涉及猜测和技巧。
即使您完全了解 php-fpm
的所有设置,也无法保证成功。 如果您不了解 php-fpm
的存在,那么您就不必浪费时间担心它。 继续做您已经在做的事情并继续下去。
同時に、結果ができるだけ劇的にならないようにしてください。はい、php-fpm を最適化する必要があるのはなぜですか?最適化するにはどうすればよいですか? を最初から再コンパイルし、不要なモジュールをすべて削除することでパフォーマンスを向上させることができますが、このアプローチは運用環境では十分に賢明ではありません。何かを最適化するという全体的な考え方は、ニーズがデフォルトと異なるかどうかを確認し (異なることはほとんどありません!)、必要に応じて小さな変更を加えることです。
英語の元のアドレス: https://geekflare.com/php-fpm-optimization/
推奨学習: 「php-fpm を最適化する必要があるのはなぜですか?最適化するにはどうすればよいですか? ビデオ チュートリアル 」
以上がphp-fpm を最適化する必要があるのはなぜですか?最適化するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

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

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

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

ホットトピック











PHP 8.4 では、いくつかの新機能、セキュリティの改善、パフォーマンスの改善が行われ、かなりの量の機能の非推奨と削除が行われています。 このガイドでは、Ubuntu、Debian、またはその派生版に PHP 8.4 をインストールする方法、または PHP 8.4 にアップグレードする方法について説明します。

あなたが経験豊富な PHP 開発者であれば、すでにそこにいて、すでにそれを行っていると感じているかもしれません。あなたは、運用を達成するために、かなりの数のアプリケーションを開発し、数百万行のコードをデバッグし、大量のスクリプトを微調整してきました。

Visual Studio Code (VS Code とも呼ばれる) は、すべての主要なオペレーティング システムで利用できる無料のソース コード エディター (統合開発環境 (IDE)) です。 多くのプログラミング言語の拡張機能の大規模なコレクションを備えた VS Code は、

JWTは、JSONに基づくオープン標準であり、主にアイデンティティ認証と情報交換のために、当事者間で情報を安全に送信するために使用されます。 1。JWTは、ヘッダー、ペイロード、署名の3つの部分で構成されています。 2。JWTの実用的な原則には、JWTの生成、JWTの検証、ペイロードの解析という3つのステップが含まれます。 3. PHPでの認証にJWTを使用する場合、JWTを生成および検証でき、ユーザーの役割と許可情報を高度な使用に含めることができます。 4.一般的なエラーには、署名検証障害、トークンの有効期限、およびペイロードが大きくなります。デバッグスキルには、デバッグツールの使用とロギングが含まれます。 5.パフォーマンスの最適化とベストプラクティスには、適切な署名アルゴリズムの使用、有効期間を合理的に設定することが含まれます。

文字列は、文字、数字、シンボルを含む一連の文字です。このチュートリアルでは、さまざまな方法を使用してPHPの特定の文字列内の母音の数を計算する方法を学びます。英語の母音は、a、e、i、o、u、そしてそれらは大文字または小文字である可能性があります。 母音とは何ですか? 母音は、特定の発音を表すアルファベットのある文字です。大文字と小文字など、英語には5つの母音があります。 a、e、i、o、u 例1 入力:string = "tutorialspoint" 出力:6 説明する 文字列「TutorialSpoint」の母音は、u、o、i、a、o、iです。合計で6元があります

このチュートリアルでは、PHPを使用してXMLドキュメントを効率的に処理する方法を示しています。 XML(拡張可能なマークアップ言語)は、人間の読みやすさとマシン解析の両方に合わせて設計された多用途のテキストベースのマークアップ言語です。一般的にデータストレージに使用されます

静的結合(静的::) PHPで後期静的結合(LSB)を実装し、クラスを定義するのではなく、静的コンテキストで呼び出しクラスを参照できるようにします。 1)解析プロセスは実行時に実行されます。2)継承関係のコールクラスを検索します。3)パフォーマンスオーバーヘッドをもたらす可能性があります。

PHPの魔法の方法は何ですか? PHPの魔法の方法には次のものが含まれます。1。\ _ \ _コンストラクト、オブジェクトの初期化に使用されます。 2。\ _ \ _リソースのクリーンアップに使用される破壊。 3。\ _ \ _呼び出し、存在しないメソッド呼び出しを処理します。 4。\ _ \ _ get、dynamic属性アクセスを実装します。 5。\ _ \ _セット、動的属性設定を実装します。これらの方法は、特定の状況で自動的に呼び出され、コードの柔軟性と効率を向上させます。
