検索
ホームページバックエンド開発PHPチュートリアルphp-fpmのプロセス番号管理について

php-fpmのプロセス番号管理について

Jul 13, 2018 pm 04:03 PM
cgifastcgiphpphp-fpm

この記事では、参考値のあるphp-fpmのプロセス数管理を中心に紹介していますので、皆さんにも共有しておきますので、困っている方は参考にしてください

PHP-FPM

最初にいくつかの名詞の概念を理解しましょう:

CGICommon 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 サイトに適しています。サポートされている機能は次のとおりです。

    ##スムーズな停止/開始を実現する高度なプロセス管理機能
  1. 低速ロギング スクリプト
  2. 動的/静的サブプロセスの生成
  3. php.iniに基づく設定ファイル
  4. PHP-FPM
5.4 以降は PHP ソース コードに統合され、メモリとプロセスを効果的に制御し、PHP 設定をスムーズにリロードできる、より優れた PHP プロセス管理方法を提供します。これを使用する必要がある場合は、

./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スムーズな再起動間隔を設定して、アクセラレータの共有メモリ使用量の問題を解決します。使用可能な単位は

s (デフォルト)/m/h/d

で、デフォルト値は 0 (オフを意味します) です。

process.max

FPM

作成できる子プロセスの最大数。複数の pm = Dynamic# を使用します。 ##php-fpm プール

プロセス プールを構成する場合、子プロセスのグローバル数を制御します。デフォルト値は 0 で、制限がないことを意味します。

プロセス プール構成PHP-FPM の残りの構成は、プール定義

という名前の領域です。この領域の構成設定は次のとおりです。各

PHP-FPM

プロセス プール。プロセス プールは、関連する一連のサブプロセスです。この部分は、

[www] のように、[プロセス プール名] で始まります。 ps aux | grep phpphp-fpm: pool www が表示されると説明できます。

#pm##pm

プロセス マネージャー

を指し、プロセス マネージャーが子プロセスの数を制御する方法を指定します。これは必須であり、3 つの値をサポートします:

static: pm.max_children## で指定された固定数の子プロセスを使用します。

  • dynamic: 次のパラメータに基づいて子プロセスの数を動的に調整します。少なくとも 1 つの子プロセスが必要です。

  • pm.max_chidren

    : 同時に存続できる子プロセスの最大数

    • pm.start_servers
    • : 数起動時に作成される子プロセスの数、デフォルト値は

      min_spare_servers max_spare_servers - min_spare_servers) / 2

    • pm.min_spare_servers: アイドル状態の最小数子プロセスが十分でない場合は、新しい子プロセスが自動的に作成されます

    • pm.max_spare_servers
    • : アイドル状態の子プロセスの最大数。超過した場合は、子プロセスが自動的に作成されます。プロセスは強制終了されます

    • ondemand

      : 子プロセスは起動時に作成されず、新しいリクエストが到着したときにのみ作成されます。次の 2 つのパラメータが使用されます:

  • pm.max_children

    • pm.process_idle_timeou
    • t 子プロセスのアイドル タイムアウト。タイムアウト後に新しいリクエストを処理できない場合、子プロセスは強制終了されます

pm.max_requests

每一个子进程的最大请求服务数量,如果超过了这个值,该子进程会被自动重启。在解决第三方库的内存泄漏问题时,这个参数会很有用。默认值为0,指子进程可以持续不断的服务请求。

PHP-FPM配置优化

PHP-FPM管理的方式是一个master主进程,多个pool进程池,多个worker子进程。其中每个进程池监听一个socket套接字。具体的图示:

php-fpmのプロセス番号管理について

其中的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面向对象设计五大原则(SOLID)的总结

对于PhpStorm代码格式化设置的介绍

如何在yii2框架的di容器源码中了解反射的作用

以上がphp-fpmのプロセス番号管理についての詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
PHPの目的:動的なWebサイトの構築PHPの目的:動的なWebサイトの構築Apr 15, 2025 am 12:18 AM

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

PHP:データベースとサーバー側のロジックの処理PHP:データベースとサーバー側のロジックの処理Apr 15, 2025 am 12:15 AM

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

PHPでのSQL注入をどのように防止しますか? (準備された声明、PDO)PHPでのSQL注入をどのように防止しますか? (準備された声明、PDO)Apr 15, 2025 am 12:15 AM

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

PHPおよびPython:コードの例と比較PHPおよびPython:コードの例と比較Apr 15, 2025 am 12:07 AM

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

アクション中のPHP:実際の例とアプリケーションアクション中のPHP:実際の例とアプリケーションApr 14, 2025 am 12:19 AM

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

PHP:インタラクティブなWebコンテンツを簡単に作成しますPHP:インタラクティブなWebコンテンツを簡単に作成しますApr 14, 2025 am 12:15 AM

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

PHPとPython:2つの一般的なプログラミング言語を比較しますPHPとPython:2つの一般的なプログラミング言語を比較しますApr 14, 2025 am 12:13 AM

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

PHPの永続的な関連性:それはまだ生きていますか?PHPの永続的な関連性:それはまだ生きていますか?Apr 14, 2025 am 12:12 AM

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

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ヘンタイを無料で生成します。

ホットツール

SublimeText3 Linux 新バージョン

SublimeText3 Linux 新バージョン

SublimeText3 Linux 最新バージョン

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

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

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

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

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

Dreamweaver Mac版

Dreamweaver Mac版

ビジュアル Web 開発ツール

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

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

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