php-fpm,如何控制访问特别长的请求?是否有中断的机制?
max_execute_time(php.ini): 这个是用户态时间,不累计io操作,但是大多数操作都是io会慢,所以这个参数只能适用于cpu密集型,大部分应用不适合;
request_terminate_timeout(php-fpm): 这个是request整个处理超时,是计算io操作的,
request_terminate_timeout,设置为5s,超过这个时间点,php进程结束,然后给客户端返回502.
php-fpm对于这两种设置的处理都是直接kill掉进程,再启动一个新的worker进程,整个操作代价是比较高的,但是重启有个好处是内存不会被不断消耗,即使有小部分泄漏都没事。
需要注意的是:max_execute_time是php.ini中设置的,request_terminate_timeout是php-fpm中设置的。
另外,如果想解决这种超时问题,业务层面的php代码优化,接口优化才是处理超时的最终解决方案。
二,其他php-fpm参数
; Possible Values:
; static - a fixed number (pm.max_children) of child processes;
; dynamic - the number of child processes are set dynamically based on the
; following directives. With this process management, there will be
; always at least 1 children.
; pm.max_children - the maximum number of children that can
; be alive at the same time.
; pm.start_servers - the number of children created on startup.
; pm.min_spare_servers - the minimum number of children in 'idle'
; state (waiting to process). If the number
; of 'idle' processes is less than this
; number then some children will be created.
; pm.max_spare_servers - the maximum number of children in 'idle'
; state (waiting to process). If the number
; of 'idle' processes is greater than this
; number then some children will be killed.
pm = dynamic
pm.max_children = 5
pm.min_spare_servers = 1
pm.max_spare_servers = 2
; The number of requests each child process should execute before respawning.
; This can be useful to work around memory leaks in 3rd party libraries. For
; endless request processing specify '0'. Equivalent to PHP_FCGI_MAX_REQUESTS.
; Default Value: 0
pm.max_requests = 500
; The timeout for serving a single request after which the worker process will
; be killed. This option should be used when the 'max_execution_time' ini option
; does not stop script execution for some reason. A value of '0' means 'off'.
; Available units: s(econds)(default), m(inutes), h(ours), or d(ays)
; Default Value: 0
request_terminate_timeout = 5
pm相关的参数,都是和进程管理相关的。
pm=dynamic表示进程数是动态生成。
pm.max_children 表示允许生成的最大子进程数
pm.min_spare_children 表示最小的空闲子进程
pm.max_spare_children 表示最大的空闲子进程
pm.max_requests = 500; 整个代表的是每个子进程在重新生成之前要处理多少个请求数。这个对于内存泄漏有很好的抑制作用。
也就是说子进程在处理到500个请求时候一定会重新生成。
php-fpm,默认在处理多个并发请求时,如果当前进程不够用时,最多能开到max_children个子进程数。
但是这些临时生成的子进程,并不是请求完毕就会释放,而是得等到因为某些原因需要退出时才会退出。
常见的有两个原因:
A,设定了pm.max_requests参数,那么处理了这么多请求一定会退出;
B,如设定了request_terminate_timeout,一个请求超过了这个限定,该对应的php-fpm子进程也会被kill掉。
标签:fpm,max,number,中断,php,children,pm
来源: https://www.cnblogs.com/helww/p/11201318.html