pm.max_requests 设置多少合适?

我们在设置pm.max_requests之前必须先要了解php-fpm三种模式

1、静态static

2、动态dynamic

3、按需ondemand

 

pm.max_requests设置 有关的,只有动态dynamic模式。

dynamic:动态模式。

相关参数:

启动进程数pm.start_servers

启动后进程数在pm.min_spare_servers和pm.max_spare_servers之间

超过pm.max_requests请求数重新生成子进程

 

再让大家了解一下:

一、pm.max_requests作用是什么?

设置每个子进程重生之前服务的请求数,对于可能存在内存泄漏的第三方模块来说是非常有用的.。

如果设置为 ’0′ 则一直接受请求,等同于 PHP_FCGI_MAX_REQUESTS 环境变量。

默认值: 0

pm.max_requests = 500

这段配置的意思是,当一个 PHP-CGI 进程处理的请求数累积到 500 个后,自动重启该进程。

 

二、为什么需要重启进程呢?

一般在项目中,我们多多少少都会用到一些 PHP 的第三方库,这些第三方库经常存在内存泄漏问题,当然了,也有可能是自己写的程序代码。如果不定期重启 PHP-CGI 进程,势必造成内存使用量不断增长。因此 PHP-FPM 作为 PHP-CGI 的管理器,提供了这么一项监控功能,对请求达到指定次数的 PHP-CGI 进程进行重启,保证内存使用量不增长。

 

正是因为这个机制,在高并发的站点中,经常导致 502 错误,我猜测原因是 PHP-FPM 对从 NGINX 过来的请求队列没处理好。

注意:

有时候由于 php-fpm 有好多闲置的进程一直不释放, 导致内存占用过大,FastCGI 进程一旦加载就不会释放,当其工作完成后,就休眠于 FastCGI 系统池中,等待下一次被唤醒。甚至是php-fpm假死,也会出现502的错误,只能重启php-fpm才能解决这个问题。

例如:Nginx报错upstream timed out (110: Connection timed out) 就是由于pm.max_requests 默认值为0,没有重启所引起的。

 

目前我们的解决方法是,把这个值尽量设置大些,尽可能减少 PHP-CGI 重新 SPAWN 的次数,同时也能提高总体性能。在我们自己实际的生产环境中发现,内存泄漏并不明显,因此我们将这个值可以设置得非常大。

 

如果pm.max_requests没有设置重启参数,默认为0不限制最大服务次数,也就是子进程永远不重启,经验表明,长时间不重启子进程会导致系统负载异常,处理时间变长等现象。

 

总结:

pm.max_requests究竟设置多大?大家要根据自己的实际情况来设置这个值,例如我设置的(204800)不能盲目地加大或设置过小。如果你设置过小,有可能会造成“php-fpm占用cpu和内存过高100% ”。

有时候设置为0,时间久了,占的内存就大了,还一直不释放,如果遇到请求任务过多,处理不过来,还会造成php-fpm子进程假死的情况,那时候就会经常出现502 Bad Gateway的错误,以及你打开.php的文件总是感觉很慢,请求php文件一直处于pending状态。

    A+
发布日期:2021年03月25日 12:15:55  所属分类:PHP
最后更新时间:2021-03-25 13:17:58
评分: (1 票;平均数5.00 ;最高评分 5 ;用户总数1;总得分 5;百分比100.00)
标签:
付杰
免费SSL证书 HTTPS申请 安装 配置 支持通配符*
免费SSL证书 HTTPS申请 安装 配置 支持通配符*
  • ¥ 1999.9元
  • 市场价:20000元
刷流量 刷人气 刷点击 刷收藏 刷APP关键词
刷流量 刷人气 刷点击 刷收藏 刷APP关键词
  • ¥ 1.0元
  • 市场价:9.9元
数据库基础篇:SQLServer+MySQL+HeidiSQL
  • ¥ 189.0元
  • 市场价:269.0元
数据科学与人工智能:必备数学基础
  • ¥ 298.0元
  • 市场价:398.0元

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: