php-fpm配置问题
网站运行环境是lnmp,最近其中一台出现502,我怀疑是fpm的配置问题,请大神们帮看看
max-children 420
start-servers 200
min spare servers 200
max spare servers 400
max request 1000
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
502通常是php进程挂掉,应该看fpm的日志,通常会有一个exited on signal xxx的日志,通常是触发了php的bug
赞同.PHP-FPM工作进程数设置过多,内存占用过大,导致内存发生swap,磁盘I/O增大,导致PHP-FPM不能及时响应请求,从而Nginx返回502.
之前碰到过,原因是内存不足。
看下内存够不够
配置不全无法详细解答
你服务器内存和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保持持久连接.