`
dongbao100
  • 浏览: 36258 次
  • 性别: Icon_minigender_1
  • 来自: 沈阳
社区版块
存档分类
最新评论

PHP的pm、pm.max_requests、memory_limit参数

    博客分类:
  • php
 
阅读更多

1、php-fpm.conf中的pm
pm是来控制php-fpm的工作进程数到底是一次性产生固定不变(static)还是在运行过程中随着需要动态变化(dynamic)。众所周知,工作进程数与服务器性能息息相关,太少则不能及时处理请求,太多则会占用内存过大而拖慢系统。因为php-fpm处理请求时会随着处理的请求数的增加而占用越来越多的内存,所以static模式下往往不好判断启动的能使内存利用最大化的固定进程数,所以想到了dynamic模式。可是为什么我们不用dynamic模式呢,试想某个时刻请求数比较低,20个进程足够应付,突然压力增大了,出现了40个并发PHP请求,按照最小5个空闲进程的设置就需要45个进程,也就是说需要在短时间内创建出25个进程,我们知道创建进程的操作是比较消耗系统资源的,再加上40个并发PHP请求肯定也会给MySQL带来一定的压力,此时再创建25个进程无疑是雪上加霜,所以我在这里还是选择了static模式。
2、php-fpm.conf中的pm.max_requests
根据说明我们知道这个参数的含义是php-fpm工作进程处理完多少请求后自动重启,主要目的就是为了控制请求处理过程中的内存溢出,使得内存占用在一个可接受的范围内。从这里我们感觉这个数字似乎设置的小一点更加有利于性能提升,但是当这个数字非常小的时候会发生一种情况,由于PHP请求是平均地分配给各个工作进程的,如果这个值太小就会导致所有的工作进程几乎同时达到这个值并且进入需要重启的状态,当所有的工作进程都在同一时刻重启就会发生在数秒内甚至更长的时间PHP将停止响应直到所有的进程均重启完为止。这是不能接受的,所以我一般会把这个值设置为PHP启动后第一批工作进程达到此值需要重启时,第一个进程重启与最后一个进程重启之间的时间相差1分钟以上,一般在压力比较大的晚上这个差值将会扩大到5分钟左右,此时对进程重启对服务器的负面影响就可以忽略了。
3、php.ini中的memory_limit
顾名思义,这个值是用来限制PHP所占用的内存的,具体一点说就是一个PHP工作进程即php-fpm所能够使用的最大内存,默认是128MB,一开始在虚拟机中我设置为PHP 5.1.6的默认值16MB,发现大于16MB的附件将无法下载,也就是说PHP 5.3中附件是从硬盘完整读取到PHP内存中再传给nginx的,这跟PHP 5.1.6+Apache 2.2.3不同,后者读取附件是PHP并不加载这个附件而是直接交给Apache来加载,这就使得php-fpm占用内存大了不少。当php-fpm占用内存达到了memory_limit所限制的值时,当前进程会被fpm主进程使用TERM信号终止掉,此时被处理的PHP请求将返回客户端502错误,nginx的error log中将记录出错原因是“Connection reset by peer”。可是更加令人难以理解的事情发生了,在使用了eAccelerator的PHP 5.3上,居然发生了当php-fpm内存达到memory_limit所限制的值时,所有进程都开始疯狂重启而不再接受任何请求,此时除非使用kill命令杀死主进程,否则php-fpm永远都不会恢复响应,可想而知nginx必然出现无止境的502错误了。。。

分享到:
评论

相关推荐

    LNMPA的优化.zip_LNMPA的优化_lnmpa_rainreh_rockysop

    - **PHP配置**:调整php.ini中的memory_limit、max_execution_time等参数,平衡性能和资源消耗。 - **OPcache**:启用OPcache,预编译并缓存PHP脚本,减少解析和编译时间。 - **并发处理**:利用PHP-FPM的多进程...

    nginx+php-fpm模式php内存泄漏探究1

    2. 调整PHP-FPM配置:在php-fpm配置文件中设置`pm.max_requests`参数。该参数定义了一个子进程处理的最大请求数,达到这个数量后,子进程会被销毁,从而释放其占用的内存。例如,将`pm.max_requests`设置为5,意味着...

    php-fpm.conf配置文件中文翻译注释

    - `pm.max_requests`: 每个子进程处理的最大请求数,达到后会自动重启,防止内存泄漏。 - `memory_limit`: PHP脚本的内存限制。 5. **其他高级选项** - `catch_workers_output`: 是否捕获并记录子进程的输出。 ...

    nginx 502 Bad Gateway 错误解决办法

    4. **优化PHP配置**:检查`php.ini`中的`memory_limit`,如果过低可能会导致PHP进程崩溃,将其适当调高。 5. **调整`max_requests`**:对于PHP-FPM,如果`max_requests`设置得过低,可能导致工作进程在处理完一定...

    Bochs - The cross platform IA-32 (x86) emulator

    - Determine and select max physical address size automatically at configure time: - 32-bit physical address for 386/486 guests - 36-bit physical address for PSE-36 enabled Pentium guest - 40-bit ...

Global site tag (gtag.js) - Google Analytics