开发者社区> 问答> 正文

php-fpm配置问题,报错

网站运行环境是lnmp,最近其中一台出现502,我怀疑是fpm的配置问题,请大神们帮看看

max-children 420

start-servers 200

min spare servers 200

max spare servers 400

max request 1000


展开
收起
一枚小鲜肉帅哥 2020-05-27 21:24:08 916 0
1 条回答
写回答
取消 提交回答
  • 菜不可及的程序猿

    你服务器内存和CPU核心数多少呀,居然搞420个工作进程.
    假设一个工作进程占用20MB内存,420个就占用8400MB内存.
    如果你的CPU核心只有4个,你开那么多工作进程只会徒增CPU的上下文切换.

    PHP-FPM epoll事件驱动(events.mechanism = epoll)的master进程会把Nginx发过来的新请求分配给空闲的worker进程.如果没有空闲的worker进程,master进程会把请求分配一个其中一个正在处理其他请求的worker进程,进入到backlog挂起(积压)的连接队列(半连接队列)里,排队等待处理,默认值为listen.backlog = 128.

    个人认为,根据系统内存来设置PHP-FPM个数,是非常不合理的,这样情况下,上下文切换的开销很大,内存占用也很多.多进程是为了充分利用CPU的多核心,所以PHP-FPM个数设为CPU核心数也是合理的.如果PHP-FPM工作进程偶尔会因为一些操作阻塞(应该尽量避免),导致出现空闲的CPU核心,这时PHP-FPM个数可以设为CPU核心数*2.这样既能充分利用CPU的多核心,又可以避免过多的上下文切换造成的系统开销,还能节省内存.节省下来的内存可以用来分配给Memcached/Redis/MySQL.

    对于单核心VPS,开1个Nginx工作进程和2个PHP-FPM工作进程就够了,PHP-FPM和MySQL保持持久连接.######

    之前碰到过,原因是内存不足。

    看下内存够不够

    配置不全无法详细解答

    ######赞同.PHP-FPM工作进程数设置过多,内存占用过大,导致内存发生swap,磁盘I/O增大,导致PHP-FPM不能及时响应请求,从而Nginx返回502.######

    502通常是php进程挂掉,应该看fpm的日志,通常会有一个exited on signal xxx的日志,通常是触发了php的bug

    2020-05-28 09:58:13
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
PHP安全开发:从白帽角度做安全 立即下载
PHP 2017.北京 全球开发者大会——高可用的PHP 立即下载
复杂PHP系统性能瓶颈排查及优化 立即下载