网站运行环境是lnmp,最近其中一台出现502,我怀疑是fpm的配置问题,请大神们帮看看
max-children 420
start-servers 200
min spare servers 200
max spare servers 400
max request 1000
你服务器内存和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
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。