Contract several directories
/usr/local/php/sbin/php-fpm
/usr/local/php/etc/php-fpm.conf
/usr/local/php/etc/php.ini
One, the php-fpm start parameter
Copy CodeThe code is as follows:
#测试php-FPM Configuration
/usr/local/php/sbin/php-fpm-t
/usr/local/php/sbin/php-fpm-c/usr/local/php/etc/php.ini-y/usr/local/php/etc/php-fpm.conf-t
#启动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
#关闭php-FPM
Kill-int ' Cat/usr/local/php/var/run/php-fpm.pid '
#重启php-FPM
KILL-USR2 ' Cat/usr/local/php/var/run/php-fpm.pid '
Two, php-fpm.conf important parameters detailed
Copy CodeThe code is as follows:
PID = Run/php-fpm.pid
#pid设置, the default is var/run/php-fpm.pid in the installation directory, it is recommended to turn on
Error_log = Log/php-fpm.log
#错误日志, Var/log/php-fpm.log in the installation directory by default
Log_level = Notice
#错误级别. The available levels are: alert (which must be processed immediately), error (Error condition), warning (warning condition), notice (general important information), debug (debug information). Default: Notice.
Emergency_restart_threshold = 60
Emergency_restart_interval = 60s
If the number of-cgi processes is more than Emergency_restart_threshold, the PHP-FPM will restart gracefully. These two options generally leave the default values.
Process_control_timeout = 0
#设置子进程接受主进程复用信号的超时时间. Available units: s (seconds), M (min), H (Hours), or D (day) default units: s (seconds). Default value: 0.
Daemonize = yes
#后台执行fpm, the default value is yes if you want to change to no for debugging. 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监听端口, the address that PHP handles 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 =-1
#backlog数, 1 means unrestricted, determined by the operating system, and this line is commented out. Backlog meaning reference: http://www.3gyou.cc/?p=41
Listen.allowed_clients = 127.0.0.1
#允许访问FastCGI进程的IP, set any to No limit IP, if you want to set other hosts Nginx can also access this FPM process, listen to set the cost of access to the IP. The default value is any. Each address is separated by commas. Allows any server to request a connection if it is not set or is empty
Listen.owner = www
Listen.group = www
Listen.mode = 0666
#unix socket Settings option, if accessed using TCP, Comment here.
user = www
Group = www
#启动进程的帐户和组
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 #, guarantees the minimum number of idle processes, and creates a new child process if the idle process is less than this value
Pm.max_spare_servers #, guarantees the maximum number of idle processes, and cleans up if the idle process is larger than this value
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.
Pm.status_path =/status
#FPM状态页面的网址. If not set, the status page cannot be accessed. Default value: None. Munin monitoring will be used to
Ping.path =/ping
#FPM监控页面的ping网址. If not set, the ping page cannot be accessed. This page is used to externally detect whether FPM is alive and can respond to requests. Note that you must start with a slash (/).
Ping.response = Pong
#用于定义ping请求的返回相应. Returns the Text/plain format text for HTTP 200. Default value: Pong.
Request_terminate_timeout = 0
#设置单个请求的超时中止时间. This option may be useful for scripts in php.ini settings where ' Max_execution_time ' is not aborted for some special reason. Set to ' 0 ' for ' Off '. You can try changing this option when a 502 error occurs frequently.
Request_slowlog_timeout = 10s
#当一个请求该设置的超时时间后, the corresponding PHP call stack information is written to the slow log in its entirety. Set to ' 0 ' means ' Off '
Slowlog = log/$pool. Log.slow
#慢请求的记录日志, use with Request_slowlog_timeout
Rlimit_files = 1024
#设置文件打开描述符的rlimit限制. Default: System-defined value default open handle is 1024, can be viewed using ULIMIT-N, ulimit-n 2048 modified.
Rlimit_core = 0
#设置核心rlimit最大限制值. Available values: ' Unlimited ', 0, or positive integer. Default value: System-defined value.
Chroot =
#启动时的Chroot目录. The defined directory needs to be an absolute path. If not set, Chroot is not used.
ChDir =
#设置启动目录, it is automatically chdir to the directory at startup. The defined directory needs to be an absolute path. Default value: Current directory, or/directory (chroot)
Catch_workers_output = yes
#重定向运行过程中的stdout和stderr到主要的错误日志文件中. If not set, stdout and stderr will be redirected to/dev/null according to the FASTCGI rules. Default value: Empty.
three, common mistakes and solutions to organize
1. Resource problems caused by request_terminate_timeout
The value of 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 remain stuck there and will not time out. We know that php.ini inside Max_execution_time can set the maximum execution time for PHP scripts, but 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.
Copy CodeThe code is as follows:
$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:
Copy CodeThe code is as follows:
pm.max_requests = 1000
Sets the number of requests for the service before each child process is reborn. 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 time-out parameter, Slowlog set the slow log storage location
Copy the Code code as follows:
Tail-f/var/log/www.slow.log
The above command can see the slow-running 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.
http://www.bkjia.com/PHPjc/825014.html www.bkjia.com true http://www.bkjia.com/PHPjc/825014.html techarticle contract several directories/usr/local/php/sbin/php-fpm/usr/local/php/etc/php-fpm.conf/usr/local/php/etc/php.ini one, php-fpm startup parameters Copy the code code as follows: #测试php-FPM configuration ...