php-fpm.conf
-
pm
pm是来控制php-fpm的worker进程数到底是一次性产生固定不变(static模式),还是在运行过程中随着需要动态变化(dynamic)。众所周知,worker进程数与服务器的性能息息相关,进程数太少则不能及时处理请求,而太多则会占用过多的内存而拖慢系统。 php-fpm处理请求时会随着处理请求数的增加而占用越来越多的内存,所以static模式下往往不好判断启动多少的进程数能使内存利用达到最大化,所以想到了dynamic模式。
-
pm.max_requests
php-fpm工作进程处理完max_requests个请求后自动重启,主要目的就是为了控制请求处理过程中的内存溢出,使得内存占用在一个可接受的范围内。从这里我们感觉这个数字似乎设置的小一点更加有利于性能提升,但是当这个数字非常小的时候会发生一种情况,由于PHP请求是平均地分配给各个工作进程的,如果这个值太小就会导致所有的工作进程几乎同时达到这个值并且进入需要重启的状态,当所有的工作进程都在同一时刻重启就会发生在数秒内甚至更长的时间PHP将停止响应直到所有的进程均重启完为止。这是不能接受的,所以我一般会把这个值设置为PHP启动后第一批工作进程达到此值需要重启时,第一个进程重启与最后一个进程重启之间的时间相差1分钟以上,一般在压力比较大的晚上这个差值将会扩大到5分钟左右,此时对进程重启对服务器的负面影响就可以忽略了。
php.ini
-
memory_limit
一个PHP工作进程即php-fpm所能够使用的最大内存,默认是128MB,一开始在虚拟机中我设置的默认值16MB,发现大于16MB的附件将无法下载,当php-fpm占用内存达到了memory_limit所限制的值时,当前进程会被fpm主进程使用TERM信号终止掉,此时被处理的PHP请求将返回客户端502错误,nginx的error log中将记录出错原因是“Connection reset by peer”。