この記事では、参考値のあるphp-fpmのプロセス数管理を中心に紹介していますので、皆さんにも共有しておきますので、困っている方は参考にしてください
PHP-FPM
最初にいくつかの名詞の概念を理解しましょう:
CGI
は Common Gateway Interface (Common Network Management Protocol)
であり、対話型プログラムとWeb サーバー通信用のプロトコル。 Web サーバーは、URL リクエストの処理、プロセスの開始、クライアントから送信されたデータの入力としての処理を担当し、Web サーバーはプログラムの出力を収集して適切なヘッダーを追加して、それをクライアントに送り返します。
FastCGI
は、CGI
に基づくプロトコルの拡張バージョンです。リクエストを処理する新しいプロセスを作成する代わりに、永続プロセスと作成された子プロセスを使用して処理します。これらのプロセスは FastCGI サーバーによって管理され、オーバーヘッドが少なく効率が高くなります。
PHP-FPM
は、PHP
FastCGI Process Manager (FastCGI Process Manager)
の実装であり、PHP FastCGI# の置き換えに使用されます。 ## 追加機能のほとんどは、高負荷の Web サイトに適しています。サポートされている機能は次のとおりです。
- ##スムーズな停止/開始を実現する高度なプロセス管理機能
- 低速ロギング スクリプト
-
- php.iniに基づく設定ファイル
- PHP-FPM
./configure のときに
-enable-fpm パラメータを指定し、
PHP-FPM を使用して
FastCGI# を制御します。 # #プロセス:<pre class="brush:php;toolbar:false">// 支持start/stop/quit/restart/reload/logrotate参数
// quit/reload是平滑终止和平滑重新加载,即等现有的服务完成
./php-fpm --start</pre>
PHP-FPM
構成
PHP-FPM
構成ファイルは
php-fpm.conf## です。 #, この設定ファイルでは、いくつかのパラメータを知る必要があります。以下のすべてのサブプロセスは php-fpm プロセスを参照しており、
ps aux | grep php を介してターミナル上で表示できます。
表示
php-fpm: プールwww
-
マスター メイン プロセスを表します (作業サブプロセスの管理を担当します)表示
php-fpm: プロセス マスター -
最初に見てくださいグローバル構成
PHP-FPM
emergency_restart_threshold
emergency_restart_interval## 以内に受信された場合#set time SIGSEGV
または
SIGBUS 終了信号、FPM
が再起動します。デフォルト値は 0 で、これはこの機能をオフにすることを意味します。 emergency_restart_interval
スムーズな再起動間隔を設定して、アクセラレータの共有メモリ使用量の問題を解決します。使用可能な単位は
で、デフォルト値は 0 (オフを意味します) です。
process.max作成できる子プロセスの最大数。複数の pm = Dynamic# を使用します。
##php-fpm プール
プロセス プールを構成する場合、子プロセスのグローバル数を制御します。デフォルト値は 0 で、制限がないことを意味します。 プロセス プール構成
PHP-FPM
の残りの構成は、
プール定義
PHP-FPM
プロセス プール。プロセス プールは、関連する一連のサブプロセスです。この部分は、[www] のように、
[プロセス プール名] で始まります。
ps aux | grep php
で
php-fpm: pool www が表示されると説明できます。
#pm##pm
は
を指し、プロセス マネージャーが子プロセスの数を制御する方法を指定します。これは必須であり、3 つの値をサポートします:
static
: pm.max_children
## で指定された固定数の子プロセスを使用します。
-
dynamic
: 次のパラメータに基づいて子プロセスの数を動的に調整します。少なくとも 1 つの子プロセスが必要です。
- pm.max_chidren
: 同時に存続できる子プロセスの最大数
- : 数起動時に作成される子プロセスの数、デフォルト値は
min_spare_servers max_spare_servers - min_spare_servers) / 2
pm.min_spare_servers
: アイドル状態の最小数子プロセスが十分でない場合は、新しい子プロセスが自動的に作成されます
pm.max_spare_servers- : アイドル状態の子プロセスの最大数。超過した場合は、子プロセスが自動的に作成されます。プロセスは強制終了されます
- ondemand
: 子プロセスは起動時に作成されず、新しいリクエストが到着したときにのみ作成されます。次の 2 つのパラメータが使用されます:
- pm.max_children
- t 子プロセスのアイドル タイムアウト。タイムアウト後に新しいリクエストを処理できない場合、子プロセスは強制終了されます
- pm.start_servers
- pm.process_idle_timeou
pm.max_requests
每一个子进程的最大请求服务数量,如果超过了这个值,该子进程会被自动重启。在解决第三方库的内存泄漏问题时,这个参数会很有用。默认值为0,指子进程可以持续不断的服务请求。
PHP-FPM
配置优化
PHP-FPM
管理的方式是一个master
主进程,多个pool
进程池,多个worker
子进程。其中每个进程池监听一个socket
套接字。具体的图示:
其中的worker
子进程实际处理连接请求,master
主进程负责管理子进程:
1. `master`进程,设置1s定时器,通过`socket`文件监听 2. 在`pm=dynamic`时,如果`idle worker`数量`pm.max_spare_servers`,杀死多余的空闲子进程 4. 在`pm=ondemand`时,如果`idle worker`空闲时间>`pm.process_idle_timeout`,杀死该空闲进程 5. 当连接到达时,检测如果`worker`数量>`pm.max_children`,打印`warning`日志,退出;如果无异常,使用`idle worker`服务,或者新建`worker`服务
保障基本安全
我们为了避免PHP-FPM
主进程由于某些糟糕的PHP代码挂掉,需要设置重启的全局配置:
; 如果在1min内有10个子进程被中断失效,重启主进程 emergency_restart_threshold = 10 emergency_restart_interval = 1m
进程数调优
每一个子进程同时只能服务一次连接,所以控制同时存在多少个进程数就很重要,如果过少会导致很多不必要的重建和销毁的开销,如果过多又会占用过多的内存,影响其他服务使用。
我们应该测试自己的PHP进程使用多少内存,一般来说刚启动时是8M左右,运行一段时间由于内存泄漏和缓存会上涨到30M左右,所以你需要根据自己的预期内存大小设定进程的数量。同时根据进程池的数量来看一个进程管理器的子进程数量限制。
测试平均PHP子进程占用的内存:
$ps auxf | grep php | grep -v grep work 26829 0.0 0.0 715976 4712 ? Ss Jul11 0:00 php-fpm: master process (./etc/php-fpm.conf) work 21889 0.0 0.0 729076 29668 ? S 03:12 0:20 \_ php-fpm: pool www work 21273 0.0 0.0 728928 31380 ? S 03:25 0:21 \_ php-fpm: pool www work 15114 0.0 0.0 728052 29084 ? S 03:40 0:19 \_ php-fpm: pool www work 17072 0.0 0.0 728800 34240 ? S 03:54 0:22 \_ php-fpm: pool www work 22763 0.0 0.0 727904 20352 ? S 11:29 0:04 \_ php-fpm: pool www work 38545 0.0 0.0 727796 19484 ? S 12:34 0:01 \_ php-fpm: pool www // 共占用的内存数量 $ps auxf | grep php | grep -v grep | grep -v master | awk '{sum+=$6} END {print sum}' 162712 // 所有的子进程数量 $ ps auxf | grep php | grep -v grep | grep -v master | wc -l 6
可以看到第6列,每一个子进程的内存占用大概在19-34M之间(单位为KB)。平均的内存占用为162712KB/6 = 27.1M
。
查看服务器总的内存大小
$ free -g total used free shared buffers cached Mem: 157 141 15 0 4 123 -/+ buffers/cache: 13 143 Swap: 0 0 0
可以看出我的服务器总得内存大小是157G(-g采用了G的单位)。
进程数限制
此时如果我们分配全部的内存给PHP-FPM
使用,那么进程数可以限制在157000/27 = 5814
,但是由于我的服务器同时服务了很多内容,所以我们可以向下调整到512个进程数:
process.max = 512 pm = dynamic pm.max_children = 512 pm.start_servers = 16 pm.min_spare_servers = 8 pm.max_spare_serveres = 30
防止内存泄漏
由于糟糕的插件和库,内存泄漏时有发生,所以我们需要对每一个子进程服务的请求数量做限制,防止无限制的内存泄漏:
pm.max_requests = 1000
重启
如果上面的配置都按照你的实际需求和环境配置好了,不要忘记重启PHP-FPM
服务。
以上就是本文的全部内容,希望对大家的学习有所帮助,更多相关内容请关注PHP中文网!
相关推荐:
以上がphp-fpmのプロセス番号管理についての詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

PHPは動的なWebサイトを構築するために使用され、そのコア関数には次のものが含まれます。1。データベースに接続することにより、動的コンテンツを生成し、リアルタイムでWebページを生成します。 2。ユーザーのインタラクションを処理し、提出をフォームし、入力を確認し、操作に応答します。 3.セッションとユーザー認証を管理して、パーソナライズされたエクスペリエンスを提供します。 4.パフォーマンスを最適化し、ベストプラクティスに従って、ウェブサイトの効率とセキュリティを改善します。

PHPはMySQLIおよびPDO拡張機能を使用して、データベース操作とサーバー側のロジック処理で対話し、セッション管理などの関数を介してサーバー側のロジックを処理します。 1)MySQLIまたはPDOを使用してデータベースに接続し、SQLクエリを実行します。 2)セッション管理およびその他の機能を通じて、HTTPリクエストとユーザーステータスを処理します。 3)トランザクションを使用して、データベース操作の原子性を確保します。 4)SQLインジェクションを防ぎ、例外処理とデバッグの閉鎖接続を使用します。 5)インデックスとキャッシュを通じてパフォーマンスを最適化し、読みやすいコードを書き、エラー処理を実行します。

PHPで前処理ステートメントとPDOを使用すると、SQL注入攻撃を効果的に防ぐことができます。 1)PDOを使用してデータベースに接続し、エラーモードを設定します。 2)準備方法を使用して前処理ステートメントを作成し、プレースホルダーを使用してデータを渡し、メソッドを実行します。 3)結果のクエリを処理し、コードのセキュリティとパフォーマンスを確保します。

PHPとPythonには独自の利点と短所があり、選択はプロジェクトのニーズと個人的な好みに依存します。 1.PHPは、大規模なWebアプリケーションの迅速な開発とメンテナンスに適しています。 2。Pythonは、データサイエンスと機械学習の分野を支配しています。

PHPは、電子商取引、コンテンツ管理システム、API開発で広く使用されています。 1)eコマース:ショッピングカート機能と支払い処理に使用。 2)コンテンツ管理システム:動的コンテンツの生成とユーザー管理に使用されます。 3)API開発:RESTFUL API開発とAPIセキュリティに使用されます。パフォーマンスの最適化とベストプラクティスを通じて、PHPアプリケーションの効率と保守性が向上します。

PHPにより、インタラクティブなWebコンテンツを簡単に作成できます。 1)HTMLを埋め込んでコンテンツを動的に生成し、ユーザー入力またはデータベースデータに基づいてリアルタイムで表示します。 2)プロセスフォームの提出と動的出力を生成して、XSSを防ぐためにHTMLSPECIALCHARSを使用していることを確認します。 3)MySQLを使用してユーザー登録システムを作成し、Password_HashおよびPreprocessingステートメントを使用してセキュリティを強化します。これらの手法を習得すると、Web開発の効率が向上します。

PHPとPythonにはそれぞれ独自の利点があり、プロジェクトの要件に従って選択します。 1.PHPは、特にWebサイトの迅速な開発とメンテナンスに適しています。 2。Pythonは、データサイエンス、機械学習、人工知能に適しており、簡潔な構文を備えており、初心者に適しています。

PHPは依然として動的であり、現代のプログラミングの分野で重要な位置を占めています。 1)PHPのシンプルさと強力なコミュニティサポートにより、Web開発で広く使用されています。 2)その柔軟性と安定性により、Webフォーム、データベース操作、ファイル処理の処理において顕著になります。 3)PHPは、初心者や経験豊富な開発者に適した、常に進化し、最適化しています。


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

SublimeText3 Linux 新バージョン
SublimeText3 Linux 最新バージョン

SAP NetWeaver Server Adapter for Eclipse
Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

VSCode Windows 64 ビットのダウンロード
Microsoft によって発売された無料で強力な IDE エディター

Dreamweaver Mac版
ビジュアル Web 開発ツール

AtomエディタMac版ダウンロード
最も人気のあるオープンソースエディター
