ホームページ  >  記事  >  バックエンド開発  >  php-fpm の起動パラメータと重要な設定の詳細な説明

php-fpm の起動パラメータと重要な設定の詳細な説明

WBOY
WBOYオリジナル
2016-07-30 13:30:531035ブラウズ

php-fpmの起動パラメータと重要な設定の詳細な説明

いくつかのディレクトリに同意します

  • /usr/local/php/sbin/php-fpm
  • /usr/local/php/etc/php-fpm.conf
  • /usr/local/php/etc/php.ini

1、php-fpm

1

2

3

4

5

6

7

8

9

10

11

12

13

#php-fpm 構成をテストする #测试php-fpm配置

/usr/local/php/sbin/php-fpm -t

/usr/local/php/sbin/php-fpm/usr/local/php/etc/php/usr/local/php/sbin/php-fpm /usr/local/php/etc/php-fpm /usr /local/php/sbin/php-fpm

-c

#启动php-fpm

/usr/local/php/sbin/php-fpm

/usr/local/php/sbin/php-fpm/usr/local/php/etc/php.ini -y /usr/local/php/etc/php/usr/local/php/etc/php-fpm.conf -t/usr/local/php/etc/php-fpm.conf

#关闭php-fpm

killcat /usr/local/php/var/run/php-fpm.pid`

#重启php-fpm

🎜🎜/usr/local/php/sbin/php-fpm🎜🎜🎜🎜/usr/local/php/sbin/php-fpm🎜🎜-cを起動します。 🎜🎜/usr/local/php/etc/php🎜.ini -y 🎜🎜/usr/local/php/etc/php-fpm🎜🎜.conf🎜🎜🎜#Close php-fpm🎜🎜🎜kill🎜 🎜-INT `🎜cat🎜 🎜/ usr/local/php/var/run/php-fpm🎜🎜.pid`🎜🎜🎜#restartphp-fpm🎜🎜

kill -USR2 `cat /usr/local/php/var/run/php-fpm.pid`

/usr/local/php/var/run/php-fpm.pid`
🎜🎜🎜🎜

2番目、php-fpm.confの重要なパラメータの詳細な説明

1

2

3

4

5

6

7

8

9

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

7 2

73

74

75

76

77

78

79

pid = run

/php-fpm

.pid

#pid設定、デフォルトはインストールディレクトリのvar/run/php-fpm.pidです、オンにすることをお勧めします

error_log = log

/php-fpm

.log

#エラーログ、デフォルトはインストールディレクトリのvar/log/php-fpm.logです

log_level = 注意/php-fpm.pid

#pid设置,默认在安装目录中的var/run/php-fpm.pid,建议开启

#エラーレベル。 利用可能なレベル: アラート (直ちに対処する必要がある)、エラー (エラー状況)、警告 (警告状況)、通知 (一般的な重要な情報)、デバッグ (デバッグ情報) デフォルト: Notice./php-fpm.log

#错误日志,默认在安装目录中的var/log/php-fpm.log

emergency_restart_threshold = 60

緊急再起動間隔 = 60s

#emergency_restart_interval で設定された値内で SIGSEGV または SIGBUS エラーのある php-cgi プロセスの数が超過していることを示します Emergency_restart_threshold、php-fpm は正常に再起動します。これら 2 つのオプションは通常、デフォルト値のままです。

process_control_timeout = 0

#メインプロセスの再利用シグナルを受け入れるための子プロセスのタイムアウトを設定します。 使用可能な単位: s (秒)、m (分)、h (時間)、または d (日) デフォルトの単位: s (秒) デフォルト値: 0.

daemonize =

はい

#fpm をバックグラウンドで実行します。デフォルト値は、デバッグのために no に変更できます。 FPM では、複数のプロセス プールを異なる設定で実行できます。 これらの設定は、プロセス プールごとに個別に設定できます。

聞いてください = 127.0.0.1:9000

#fpm リスニング ポート。これは nginx の php によって処理されるアドレスです。通常、デフォルト値で十分です。利用可能な形式は次のとおりです。 「ip:port」、「port」、「/path/to/unix/socket」。各プロセス プールを設定する必要があります。

listen.backlog = -1

#backlog数,-1表示无限制,由操作系统决定,此行注释掉就行。backlog含义参考:http://www.3gyou.cc/?p=41#バックログ番号、-1 は無制限を意味し、オペレーティング システムによって決定されます。この行をコメントアウトするだけです。バックログの意味参照: http://www.3gyou.cc/?p=41

listen.allowed_clients = 127.0.0.1

# FastCGI プロセスの IP へのアクセスを許可します。他のホストの nginx もこの FPM プロセスにアクセスできるように設定する場合は、listen をローカル IP に設定する必要があります。アクセスできるものです。デフォルト値は任意です。各アドレスはカンマで区切られます。 設定されていないか空の場合、接続を要求するサーバーはすべて許可されます

listen.owner = www

listen.group = www

listen.mode = 0666

#unix ソケット設定オプション。TCP モードを使用してアクセスする場合は、ここにコメントしてください。

ユーザー = www

グループ = www

#启动进程的帐户和组

#プロセスを開始したアカウントとグループ

#对于专用服务器,pm可以设置为static。

#如何控制子进程,选项有static和dynamic。如果选择static,则由pm.max_children指定固定的子进程数。如果选择dynamic,则由下开参数决定:pm = 動的

#専用サーバーの場合、pm を静的に設定できます。 #,子进程最大数

#子プロセスを制御する方法、オプションは静的と動的です。 static を選択した場合、固定数の子プロセスが pm.max_children によって指定されます。動的が選択されている場合、次のパラメータによって決定されます:

#,启动时的进程数pm.max_children

🎜#、子プロセスの最大数🎜🎜🎜🎜pm.start_servers 🎜🎜#、起動時のプロセス数🎜🎜

pm.min_spare_servers #,保证空闲进程数最小值,如果空闲进程小于此值,则创建新的子进程#、アイドルプロセスの最小数を保証します。アイドルプロセスがこの値より少ない場合は、新しい子プロセスを作成します

pm.max_spare_servers #,保证空闲进程数最大值,如果空闲进程大于此值,此进行清理

#、アイドルプロセスの最大数を保証します。アイドルプロセスがこの値より大きい場合、これはクリーンアップされます

pm.max_requests = 1000

#各子プロセスが再生成される前に処理されるリクエストの数を設定します。 「0」に設定すると、リクエストは常に受け入れられます。デフォルト値: 0.

/status。 =

/status

#FPM ステータス ページの URL。 設定されていない場合、ステータス ページにアクセスできません。munin モニタリングでは pingping/ping

.パス =

/ping

ping#FPM 監視ページの ping URL。 設定されていない場合、ping ページにアクセスできません。このページは、FPM が動作しているかどうかを外部から検出するために使用され、リクエストに応答できるかどうかをスラッシュ (/) で始める必要があることに注意してください。

ping

。応答 = pong

# ping リクエストの返信応答を定義するために使用されます。 テキスト/プレーン形式のテキストを HTTP 200 として返します。デフォルト値: pong.

request_terminate_timeout = 0

#単一リクエストのタイムアウトを設定します。 このオプションは、php.ini 設定の「max_execution_time」が何らかの特別な理由で実行中のスクリプトを中止しない場合に便利です。これを「0」に設定すると、502 エラーが頻繁に発生する場合にこのオプションを変更してみてください。

request_slowlog_timeout = 10s

#リクエストが設定されたタイムアウトに達すると、対応する PHP コールスタック情報がスローログに完全に書き込まれます。 「オフ」の場合は「0」に設定します

🎜🎜slowlog = log/$pool.log.slow🎜🎜

#慢请求的记录日志,配合request_slowlog_timeout使用

rlimit_files = 1024

#ファイルオープン記述子のrlimit制限を設定します。 デフォルト値: デフォルトの開閉可能なハンドルのシステム定義値は 1024 で、ulimit -n を使用して表示でき、ulimit -n 2048 で変更できます。

rlimit_core = 0

#core rlimit の上限値を設定します。 使用可能な値: '無制限'、0 または正の整数 デフォルト値: システム定義の値。 =

#起動時の Chroot ディレクトリ。 定義されたディレクトリは絶対パスである必要があります。設定されていない場合、chroot は使用されません。

chdir =

#起動ディレクトリを設定します。起動中に自動的にディレクトリに転送されます。 定義されたディレクトリは絶対パスである必要があります。デフォルト値: 現在のディレクトリ、または /directory (chroot 時)

catch_workers_output = はい

#操作中の stdout と stderr をメインのエラー ログ ファイルにリダイレクトします。 設定されていない場合、stdout と stderr は FastCGI ルールに従って /dev/null にリダイレクトされます。 デフォルト値: 空。

3 つの一般的なエラーと解決策

1. request_terminate_timeout によって引き起こされるリソースの問題

request_terminate_timeout の値が 0 または長すぎるように設定されている場合、file_get_contents でリソースの問題が発生する可能性があります。

file_get_contents によって要求されたリモート リソースの応答が遅すぎる場合、file_get_contents はタイムアウトせずに常にそこでスタックします。 php.ini の max_execution_time で PHP スクリプトの最大実行時間を設定できることはわかっていますが、php-cgi (php-fpm) ではこのパラメータは有効になりません。 PHP スクリプトの最大実行時間を実際に制御できるのは、php-fpm.conf 設定ファイルの request_terminate_timeout パラメータです。

request_terminate_timeout のデフォルト値は 0 秒です。これは、PHP スクリプトが実行を継続することを意味します。このように、すべての php-cgi プロセスが file_get_contents() 関数でスタックすると、この Nginx+PHP Web サーバーは新しい PHP リクエストを処理できなくなり、Nginx はユーザーに「502 Bad Gateway」を返します。 PHP スクリプトの最大実行時間を設定するにはこのパラメータを変更する必要がありますが、根本的な原因ではなく症状を治療するだけです。たとえば、file_get_contents() が発生した場合は 30 秒に変更します。 Web ページのコンテンツの取得が遅い場合、150 の php-cgi プロセスが 1 秒あたり 5 つのリクエストしか処理できないことを意味し、Web サーバーが「502 Bad Gateway」を回避することも困難になります。解決策は、request_terminate_timeout を 10 秒または適切な値に設定するか、file_get_contents にタイムアウト パラメーターを追加することです。

1

2

3

4

5

6

7

$ctx= stream_context_create(arrayarray(

    'http' (array(

        'timeout' //设置一个超时时间,单位为秒

    )

));'http'

🎜 => 🎜array🎜🎜(🎜) 🎜🎜🎜 🎜file_get_contents($str、 0, $ctx););

2、max_requests パラメータの設定が不適切であると、断続的な 502 エラーが発生する可能性があります:

1

pm.max_requests = 1000


各子プロセスが再起動される前に処理されるリクエストの数を設定します。これは、メモリ リークが発生する可能性があるサードパーティ モジュールに非常に役立ちます。「0」に設定すると、リクエストは常に処理されます。 PHP_FCGI_MAX_REQUESTS 環境変数と同等です。デフォルト値: 0。

この設定は、PHP-CGI プロセスによって処理されるリクエストの数が 500 に達すると、プロセスが自動的に再起動されることを意味します。

しかし、なぜプロセスを再起動するのでしょうか?

一般に、プロジェクトでは、PHP のサードパーティ ライブラリをある程度使用します。これらのサードパーティ ライブラリには、PHP-CGI プロセスが定期的に再起動されないと、必然的にメモリ使用量が増加します。そこで、PHP-FPMは、PHP-CGIの管理者として、指定回数リクエストを行ったPHP-CGIプロセスを再起動し、メモリ使用量が増加しないように監視する機能を提供します。

同時実行性の高いサイトで 502 エラーが頻繁に発生するのは、まさにこの仕組みのため、PHP-FPM が NGINX からのリクエストキューをうまく処理していないことが原因だと思われます。ただし、私はまだ PHP 5.3.2 を使用していますが、この問題が PHP 5.3.3 でも存在するかどうかはわかりません。

私たちの現在の解決策は、この値をできるだけ大きく設定して、PHP-CGI の再 SPAWN の回数をできる限り減らし、同時に全体的なパフォーマンスを向上させることです。実際の運用環境では、メモリ リークが明らかではないことが判明したため、この値を非常に大きな値 (204800) に設定しました。誰もが実際の状況に応じてこの値を設定する必要があり、やみくもに増やすことはできません。

そうは言っても、このメカニズムの目的は、PHP-CGI が過剰なメモリを占有しないようにすることだけです。メモリを検出して対処してみてはいかがでしょうか。 Gao Chunhui 氏の意見に非常に同意します。プロセスの固有使用量のピークを設定して PHP-CGI プロセスを再起動することが、より良い解決策となるでしょう。

3、php-fpmのスローログ、デバッグ、および例外のトラブルシューティングアーティファクト:

request_slowlog_timeoutはタイムアウトパラメータを設定し、slowlogはスローログの保存場所を設定します

1

tail tail -f /var/log/www.slow.log

/var/log/www.slow.log
🎜🎜🎜🎜

上記では、php-fpm の起動パラメータと重要な設定の詳細な説明を、関連する内容も含めて紹介しています。PHP チュートリアルに興味のある友人に役立つことを願っています。

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