php-fpmの構成と最適化

33768 ワード

php-fpmの構成と最適化 :https://zybuluo.com/phper/note/89081
私は前のいくつかの編でphp-fpmの様々な紹介とインストールについて詳しく述べました.今日は、そのプロファイルphp-fpmのさまざまな構成と、一般的な最適化について見てみましょう.
php-fpmのインストールディレクトリ
以下は私の普段の環境でphpを構築する各種インストールディレクトリで、みんなの基本もあまり悪くありません.
centosなどのlinuxプラットフォーム
 
  
  1. /usr/local/php/php
  2. /usr/local/php/etc/php.ini
  3. /usr/local/php/sbin/php-fpm
  4. /usr/local/php/etc/php-fpm.conf

mac平台

 
  
  1. /usr/bin/php
  2. /etc/php.ini
  3. /usr/bin/php-fpm
  4. /etc/php-fpm.conf

由于我开发以Mac为主,所以就用Mac的环境配置来学习。

php-fpm配置详解

这是搜索的一份还算算比较详细的php-fpm.conf配置详解,我会针对性的修改下,当然php手册上也有详细的讲解:http://php.net/manual/zh/install.fpm.configuration.php

 
  
  1. pid = /usr/local/var/run/php-fpm.pid
  2. #pid , , Mac 。 php var/run/php-fpm.pid。 centos : /usr/local/php/var/run/php-fpm.pid
  3. error_log = /usr/local/var/log/php-fpm.log
  4. # , Mac , php var/log/php-fpm.log, centos : /usr/local/php/var/log/php-fpm.log
  5. log_level = notice
  6. # . php-fpm.log 。 : alert( ), error( ), warning( ), notice( ), debug( ). : notice.
  7. emergency_restart_threshold = 60
  8. emergency_restart_interval = 60s
  9. # emergency_restart_interval SIGSEGV SIGBUS php-cgi emergency_restart_threshold ,php-fpm 。 。0 ' '. : 0 ( ).
  10. process_control_timeout = 0
  11. # . : s( ), m( ), h( ), d( ) : s( ). : 0.
  12. daemonize = yes
  13. # fpm, yes, no。 FPM , 。 。
  14. listen = 127.0.0.1:9000
  15. #fpm , nginx php , 。 : 'ip:port', 'port', '/path/to/unix/socket'. 。 nginx php , , ip 。
  16. listen.backlog = -1
  17. #backlog , listen ,-1 , , 。backlog :http://www.3gyou.cc/?p=41
  18. listen.allowed_clients = 127.0.0.1
  19. # FastCGI IP , any IP, nginx FPM ,listen IP。 any。 . , 。
  20. listen.owner = www
  21. listen.group = www
  22. listen.mode = 0666
  23. #unix socket , tcp , 。
  24. user = www
  25. group = www
  26. # ,FPM Unix , 。 , , 。
  27. pm = dynamic
  28. #php-fpm ,pm static dynamic ondemand
  29. # static, , pm.max_children 。
  30. # dynamic, , :
  31. pm.max_children = 50 #
  32. pm.start_servers = 2 # , : min_spare_servers + (max_spare_servers - min_spare_servers) / 2
  33. pm.min_spare_servers = 1 # , ,
  34. pm.max_spare_servers = 3 #, , ,
  35. pm.max_requests = 500
  36. # . . '0' . PHP_FCGI_MAX_REQUESTS . : 0.
  37. pm.status_path = /status
  38. #FPM . , . : none. munin
  39. ping.path = /ping
  40. #FPM ping . , ping . FPM . (/)。
  41. ping.response = pong
  42. # ping . HTTP 200 text/plain . : pong.
  43. access.log = log/$pool.access.log
  44. # , 。
  45. access.format = "%R - %u %t \"%m %r%Q%q\" %s %f %{mili}d %{kilo}M %C%%"
  46. # 。
  47. slowlog = log/$pool.log.slow
  48. # , request_slowlog_timeout ,
  49. request_slowlog_timeout = 10s
  50. # , PHP . '0' 'Off'
  51. request_terminate_timeout = 0
  52. # . php.ini 'max_execution_time' . '0' 'Off'. 502 。
  53. rlimit_files = 1024
  54. # rlimit . : 1024, ulimit -n ,ulimit -n 2048 。
  55. rlimit_core = 0
  56. # rlimit . : 'unlimited' 、0 . : .
  57. chroot =
  58. # Chroot . . , chroot .
  59. chdir =
  60. # , Chdir . . : , / (chroot )
  61. catch_workers_output = yes
  62. # stdout stderr . , stdout stderr FastCGI /dev/null . : .

, 。

php-fpm

。 fasgcgi ,php php-fpm , nginx , , ? ! 。

, ?

pm = static | dynamic | ondemand

pmはこのような3 に できますが、 たちが も く っているのは の2 です.
pm=staticモードpm = staticは、 したphp-fpmサブプロセスの が されていることを し、pm.max_children = 50というパラメータのみが になります.php-fpmを すると、51(1つのプライマリ+50 のサブ)のプロセスをすべて し、 です.
pm=dynamicモードpm = dynamicモードは、 プロセスが に り てられ、 とともに に することを す. はpm.max_children,pm.start_servers,pm.min_spare_servers,pm.max_spare_serversのいくつかのパラメータによって で される.
すでにお ししましたが、ここでもう しましょう.pm.max_children = 50は、 なサブプロセスの です. する があります.ここでは、 50 のサブプロセスしかできないことを します.pm.start_servers = 20php-fpmとともに したときに されるサブプロセスの .デフォルト:min_spare_servers + (max_spare_servers - min_spare_servers)/2.ここでは、 に すると20 のサブプロセスがあります.pm.min_spare_servers = 10サーバアイドル のphp-fpmプロセスの を します. する があります. きがある は、10 であれば、いくつか して します.pm.max_spare_servers = 30サーバアイドル の php-fpmプロセス を します. する があります. きがある は、プロセス が30 チェックされ、 じて30 の になります.
たしてstaticを んだのかdynamic?
くの が が ってきて、 を んだらいいか かりません.
な は:ダイナミックは さいメモリの に して、 にプロセスを して、メモリを します. は メモリマシンに しており、 プロセスを に することはサーバリソースにも されます.
メモリが きく、8-20 Gがある は、php-fpmプロセス20 Mで すると、100 で2 Gメモリになります.staticモードをオンにすることができます.もしあなたのメモリが さいならば、 えば256 Mで、それでは して して、あなたの の のその のプロセスもメモリを する があるので、dynamicに するのが も いです、 えば:pm.max_chindren=8で、メモリ160 M を し、いつでも することができ、アクセス の のサイトには です.
スロー・ログ・クエリー
たちは 500502の に まされることがあります.nginxが のエラーコードを すると、バックエンドphp−fpm phpに らかの が したと することができ、 えば、エラーを し、タイムアウトを する.
このとき、スローログ をオンにすることができます.
slowlog = /usr/local/var/log/php-fpm.log.slow
request_slowlog_timeout = 15s

を するタイムアウト が15 、 するPHP び しスタック がスローログに に き まれます.
php-fpmスローログには、プロセス 、スクリプト 、どのファイルのどの のコードのどの が すぎるかが されます.
 
  
  1. [21-Nov-2013 14:30:38] [pool www] pid 11877
  2. script_filename = /usr/local/lnmp/nginx/html/www.quancha.cn/www/fyzb.php
  3. [0xb70fb88c] file_get_contents() /usr/local/lnmp/nginx/html/www.quancha.cn/www/fyzb.php:2

, 2 file_get_contents , 。