• php-fpm 内存相关参数设置


    1. max_children:php-fpm最大可执行进程数
    2. max_requests :每个进程请求多少次后就自动结束,然后重新建立一个children。
    3. request_terminate_timeout:每个请求最长执行时间

    max_requests 参数

    • max_requests = N 是指当每个children接受了N次请求以后,就会把自己杀死,然后重新建立一个children。
    • PV / max_children = 每一个children接受的request次数

    比如应该是 max_requests=1000,而定义的是10240,那么fpm要超过10天才能杀死children并重建,这样如果存在内存泄露的话,就会导致进程占用过多的内存而无法释放,从而使fpm的处理能力降低,还会产生一些莫名其妙的错误。
    但是如果这个值设置的过小,fpm频繁的杀死children并重建,也会导致额外的开销。

    max_requests即是说每个进程若超过这个数目(跟php进程有一点点关系,关系不大),就自动杀死。

    max_children 参数

    max_children = N
    每个children平均占用20M-30M内存,children越多,可以同时接受的并发数量越多,一般children的值是网站最高并发数+浮动值,这值再×内存占用,就是需要用到的内存。

    相应的配置参数是
    start_servers:起始进程数量
    min_spare_servers:最小进程数量
    max_spare_servers:最大进程数量
    当服务器比较空闲的时候,fpm会主动杀死一些多余的children,用来节约资源,当服务器繁忙的时候,服务器会自动建立更多的children。

    max_children & request_terminate_timeout 参数设置

    这两个值不是通用的,而是需要自己计算的。

    request_terminate_timeout 计算的方式:

    如果你的服务器性能足够好,且宽带资源足够充足,PHP脚本没有系循环或BUG的话你可以直接将”request_terminate_timeout” 设置成0s。

    0s的含义是让PHP-CGI一直执行下去而没有时间限制。也就是说你的PHP-CGI可能出现某个BUG,或者宽带不够充足或者其他的原因导致你的PHP-CGI能够假死。

    那么就建议给”request_terminate_timeout”赋一个值,这个值可以根据你服务器的性能进行设定。一般来说性能越好你可以设置越高,20分钟-30分钟都可以。由于我的服务器PHP脚本需要长时间运行,有的可能会超过10 分钟因此我设置了900秒,这样不会导致PHP-CGI死掉而出现502 Bad gateway这个错误。

    max_children 计算的方式:

    这个值原则上是越大越好,php-cgi的进程多了就会处理的很快,排队的请求就会很少。
    设 置”max_children”也需要根据服务器的性能进行设定,一般来说一台服务器正常情况下每一个php-cgi所耗费的内存在20M左右,例如 ”max_children”设置成40个,20M*40=800M也就是说在峰值的时候所有PHP-CGI所耗内存在800M以内,低于我的有效内存1G。而如果我的”max_children”设置的较小,比如5-10个,那么php-cgi就会“很累”,处理速度也很慢,等待的时间也较长。如果长时间没有得到处理的请求就会出现504 Gateway Time-out这个错误,而正在处理的很累的那几个php-cgi如果遇到了问题就会出现502 Bad gateway这个错误。

    max_children基本就是进程数,跟nginx的进程没有想象中的那么大,因为FPM会自己管理进程参数不宜设置过大,很占内存,增加进程的消耗。

  • 相关阅读:
    记忆化搜索 E
    网络流 O
    线段树 B数据结构 牛客练习赛28
    N
    线段树 G
    K
    F
    补一下昨天的博客 J
    selenium-1-python
    selenium入门知识
  • 原文地址:https://www.cnblogs.com/fixedstar/p/14089251.html
Copyright © 2020-2023  润新知