PHP-FPM性能最適化参考

3651 ワード

この2,3日ウェブサイトカードの命取りを発見しましたが、不思議なことに負荷の均衡、メモリ、ディスクの入出力、CPUはすべて正常で、私はtcpのcloseを発見しました_wait状態の接続は特に多く、それはnginxやphpの問題であるはずだ.
PHP-FPMプロファイルの最適化に関する記事を転載し、機器の構成設定パラメータに基づいて、性能を向上させる.
php-fpm.confには2つの重要なパラメータがあります.1つは「max_children、もう一つは「request_terminate_timeout”.
私の2つの設定値は1つは「40」で、1つは「900」ですが、この値は共通ではなく、自分で計算する必要があります.
計算方法は次のとおりです.
サーバのパフォーマンスが十分で、ブロードバンドリソースが十分で、PHPスクリプトがループやBUGを結んでいない場合は、「request_terminate_timeout」は0 sに設定されています.0 sの意味はPHP-CGIを時間制限なく継続させることである.それができない場合は、PHP-CGIにバグが発生したり、ブロードバンドが不足したり、他の理由でPHP-CGIが偽死したりする可能性がある場合は、「request_terminate_timeout」は、サーバのパフォーマンスに応じて設定できる値を与えます.一般的に性能が良ければ良いほど、20分から30分でも設定できます.私のサーバーPHPスクリプトは長時間実行する必要があるため、10分を超える可能性があるため、900秒を設定しました.これにより、PHP-CGIが死んで502 Bad gatewayというエラーは発生しません.
「max_children」という値はどうやって計算されたのでしょうか.この値は原則として大きくなればなるほどphp-cgiのプロセスが多くなると処理が速くなり,キューのリクエストが少なくなる.設定max_children」もサーバーの性能に応じて設定する必要がありますが、一般的には1台のサーバーが通常php-cgiごとに消費するメモリは20 M程度なので、私の「max_children」私は40個に設定し、20 M*40=800 Mつまりピーク時にすべてのPHP-CGIが消費する内に800 M以内が存在し、私の有効メモリ1 GBを下回っています.もし私の「max_children」の設定は5-10個など小さく、php-cgiは「疲れている」し、処理速度も遅く、待つ時間も長い.長い間処理されていないリクエストに504 Gateway Time-outというエラーが発生し、処理中の疲れたphp-cgiのいくつかが問題に遭遇すると502 Bad gatewayというエラーが発生します.
max_requestsとは、各プロセスがこの数を超えると(phpプロセスとは少し関係があり、あまり関係がない)、自動的に殺されるということです.私のところは512のを設置するべきで、しかし圧力のテストを怠って、少し大きく設定して、でもあまり大きく設定しないでください、構造体で、テストしたことがなくて、8 Kから9 Kの大きさに近いです.ネット上では100 kを設定しがちで、メモリの無駄になります.1つのプロセスの浪費の大きさは1 Mに近い.ネット上でよく使われる配置の128のプロセスに従って、およそ100 M程度を浪費する.はい、100 Mは白菜の価格だと認めますが、そんなに無駄にしないでください..==
max_childrenは基本的にプロセス数であり、nginxとのプロセスは想像していたほど大きくない.FPMは自分でプロセスを管理するからだ(考証しなければならない.少なくともソースコードを簡単に閲覧したが、そういう意味だと思っている).パラメータを設定しすぎないで、メモリを占有して、プロセスの消耗は私が言うまでもありません.
max_childrenの良い設定方式はreq/sによって設定して、もしプログラムが100 req/sの処理能力ならば..最大同時は10 Kである、100を設定した方がよい、これは動的に調整される.
php 5.3でstyleをapache-likeに設定することもできますstart_servers,min_spare_servers,max_spare_serversは3つのパラメータで自動的に調整できます
簡単で、具体的にはプロファイルを見て、このような設定の後、高負荷と複雑なphpプログラムでは少し手間が省け、結局req/sをテストするのは憎らしい体力の仕事だ.
  • php-fpmプロファイルのパラメータpmをpm = staticに変更するデフォルトはdynamicです.動的なこのパラメータはphp-fpmプロセスの作成が動的作成であるかphp-fpmの起動時にstaticに変更されるかを制御するために使用されます.staticは起動時に作成され、php-fpmプロセスの作成にかかるオーバーヘッドとpm=staticに関連するパラメータがpmであるためです.max_children=24最大作成php-fpmプロセスpm.max_childrenの数の多少は機械のメモリによって確定して、基本的に1つのプロセスは30 Mのメモリを必要として、100のプロセスを仮定して、それでは3000 Mで、3 Gのメモリは
  • です
  • unix socket、すなわちnginxプロファイルにfastcgi_を設定するpass=unix:/dev/shm/phpfpm.sock; phpのsocketファイルphpfpmをsockが/dev/shmに置かれている理由は/dev/shmがメモリデバイスであることであり、この中に置くとphp-fpmを構成するファイルを読み込み、パラメータlistenを修正し、listen=127.0にする.0.1:9000はlisten=/dev/shm/phpfpmに変更する.sock
    php-fpmが起動すると生成されるphpfpm.sockファイルの権限が不足していない、nginxが読めない、502エラーを報告し、listenを構成する.mode=0666、問題を完璧に解決
  • スローリクエストレコードを構成し、request_を監視するslowlog_timeout = 10s slowlog = log/$pool.log.slow
  • php-fpmプロセスで開く最大ファイルハンドル数rlimit_を構成files=1024デフォルト1024、この値は
  • を構成する必要はありません.
    モニタphp-fpm statusの構成
  • php-fpmのプロファイルを編集し、関連pool(プール)でpm.status_path=/statusを設定します.この値は/先頭
  • でなければなりません.
  • nginxプロファイルを編集し、関連serverに次の内容
  • を追加します.
    location /status {
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            include        fastcgi_params;
            fastcgi_pass   unix:/dev/shm/phpfpm.sock;
    }