php-fpm.conf Important Parameters Detailed

Source: Internet
Author: User
Tags mysql query

Pid = run/php-fpm.pid#pid settings, default in the installation directory of Var/run/php-fpm.pid, it is recommended to turn on  error_log = log/ php-fpm.log# error log, default var/log/php-fpm.log log_level = notice# error level in the installation directory .  the available level is:  Alert (must be processed immediately),  error (Error condition),  warning (warning condition),  notice (general important information),  debug (Debug info) .  default:  notice. emergency_restart_threshold = 60emergency_restart_interval = 60s# says in emergency If the number of php-cgi processes with SIGSEGV or sigbus errors within the values set by _restart_interval is more than  emergency_restart_threshold, PHP-FPM will be gracefully restarted. These two options generally leave the default values.  process_control_timeout = 0# sets the time-out period for the child process to accept the master process multiplexing signal .  available units:  s (sec),  m (min),  h (Hours),   or  d (days)   default unit:  s (seconds) .  default:  0. daemonize = yes# background performs fpm, default is Yes, If you want to debug, you can change to No. In FPM, you can use different settings to run multiple process pools.   These settings can be set individually for each process pool.  LISTEN = 127.0.0.1:9000#FPM listening port, that is, the address of PHP processing in Nginx, the general default value can be. The available formats are:  ' ip:port ',  ' Port ',  '/path/to/unix/socket ' .  each process pool needs to be set.  listen.backlog =& nbsp; -1#backlog number, 1 means unrestricted, determined by the operating system, this line is commented out. Backlog meaning reference: http://www.3gyou.cc/?p=41 listen.allowed_clients = 127.0.0.1# allows access to the IP of the fastcgi process, Set any to No limit IP, if you want to set the other host's Nginx can also access this FPM process, listen to set the cost of the IP can be accessed. The default value is any. Each address is separated by commas .  if not set or empty, allows any server to request a connection  listen.owner = wwwlisten.group =  Wwwlisten.mode = 0666#unix socket setting options, if you use TCP access, comment here.  user = wwwgroup = www# START process accounts and groups  pm = dynamic  #对于专用服务器, PM can be set to static. #如何控制子进程, the options are static and dynamic. If Static is selected, the number of fixed child processes is specified by Pm.max_children. If dynamic is selected, it is determined by the following argument: pm.max_children #, maximum number of child processes pm.start_servers #, number of processes at startup pm.min_spare_servers #, The minimum number of idle processes is guaranteed, and if the idle process is less than this value, a new subprocess pm.max_spare_servers # is created, guaranteeing the maximum number of idle processes, which is cleaned up if the idle process is larger than this value  pm.max_requests  = 1000# sets the number of requests for services before each subprocess is reborn .  is useful for third-party modules that may have a memory leak .  if set to   ' 0 '   always accepts requests .  equals  PHP_FCGI_MAX_REQUESTS  environment variable .  default value: The URL of the  0. PM.STATUS_PATH = /STATUS#FPM status page.   such as,  cannot access the Status page .  default value:  none. munin monitoring uses the ping URL to the  PING.PATH = /PING#FPM monitoring page.   If,  is not set, the ping page cannot be accessed .  the page is used to externally detect if FPM is alive and can respond to requests .  Note that you must start with a slash   (/).  ping.response = pong# is used to define the return of the ping request .  returned as  HTTP 200   text/plain  Rich Text .  Default:  pong. request_terminate_timeout = 0# Sets the time-out duration for a single request .  this option may be in the php.ini settings ' Max_execution_time ' for some special reason the script that does not abort runs is useful .  set to   ' 0 '   =   ' Off '. You can try changing this option when 502 errors are frequently encountered.  request_slowlog_timeout = 10s# when a time-out is requested for this setting, the corresponding PHP call stack information is written to the slow log .  set to   ' 0 '   Represents   ' Off '  slowlog = log/$pool. log.slow# Slow-Request logging, with request_slowlog_timeout use  rlimit_ files = 1024# Set File Open descriptor Rlimit limit .  default:  system defined value default open handle is 1024, can use  ulimit -n view, Ulimit  -n 2048 modified.  rlimit_core = 0# set core Rlimit maximum limit value .  available value:  ' unlimited '  , 0 or positive integer .  default:  system-defined value .  chroot = #启动时的ChrThe directory defined by the Oot directory .  needs to be an absolute path .  if no,  is set, chroot is not used.  chdir = #设置启动目录, automatically chdir to the directory when it starts .  The defined directory needs to be an absolute path .  the default value:  the current directory, or/directory (chroot)  catch_workers_output = yes# StdOut and stderr in the redirect run process to the primary error log file .  if not set, stdout  and  stderr  will be redirected to fastcgi according to the  /rule dev/null .  default value:  empty.

Three, common mistakes and solutions to organize

The value of 1,request_terminate_timeout, if set to 0 or too long, can cause file_get_contents resource problems.
If the remote resource requested by file_get_contents is too slow, file_get_contents will always be stuck there and will not time out, we know php.ini inside Max_execution_time can set the maximum execution time of PHP script , however, in php-cgi (PHP-FPM), this parameter does not work. The real ability to control the maximum execution time of a PHP script is the request_terminate_timeout parameter in the php-fpm.conf configuration file.

The default value for Request_terminate_timeout is 0 seconds, meaning that the PHP script will continue to execute. This way, when all the php-cgi processes are stuck in the file_get_contents () function, the nginx+php WebServer can no longer process the new PHP request, and Nginx will return "502 bad Gateway" to the user. To modify this parameter, it is necessary to set the maximum execution time for a PHP script, but the symptom is not a cure. For example, to 30s, if file_get_contents () to get a slow page content, which means that 150 php-cgi process, only 5 requests per second, WebServer also difficult to avoid "502 bad Gateway." The workaround is to set the request_terminate_timeout to 10s or a reasonable value, or to add a timeout parameter to file_get_contents.

$ctx = stream_context_create (Array (' http ' = = = Array (' timeout ' = 10//Set a time-out, in seconds)); file_get_contents ($str, 0, $ctx);

Improper configuration of the 2,max_requests parameter may cause an intermittent 502 error:

pm.max_requests = 1000
#设置每个子进程重生之前服务的请求数. is useful for third-party modules that may have a memory leak. If set to ' 0 ', the request is always accepted. Equivalent to the PHP_FCGI_MAX_REQUESTS environment variable. Default value: 0.
This configuration means that the process is automatically restarted when the number of requests processed by a php-cgi process accumulates to 500.

But why restart the process?

Generally in the project, we will more or less use some PHP third-party libraries, these third-party libraries often have a memory leak problem, if you do not periodically restart the php-cgi process, it is bound to cause memory usage is increasing. So php-fpm, as the manager of PHP-CGI, provides a monitoring function that restarts the PHP-CGI process that requests a specified number of times to ensure that the amount of memory is not increased.

It is because of this mechanism, in high-concurrency sites, often lead to 502 of errors, I guess the reason is that php-fpm to the request from NGINX queue is not handled well. However, I am still using PHP 5.3.2, I do not know if there is a problem in PHP 5.3.3.

Our solution now is to set this value as large as possible, to minimize the number of php-cgi re-SPAWN, and to improve overall performance. In our own actual production environment we found that the memory leak was not obvious, so we set the value to very large (204800). We must set this value according to their actual situation, can not blindly increase.

In other words, the purpose of this mechanism is only to ensure that the php-cgi does not take up too much memory, so why not handle it by detecting memory? I agree with Gao Chunhui that it would be a better solution to restart the php-cgi process by setting the peak intrinsic consumption of the process.

3,PHP-FPM slow log, Debug and exception troubleshooting artifact:
Request_slowlog_timeout set a timeout parameter, Slowlog set the slow log storage location, Tail-f/var/log/www.slow.log can see the slow execution of the PHP process.
You can see the frequent occurrence of network read more than, MySQL query too slow problem, according to the prompt information to troubleshoot the problem there is a clear direction.


Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.