服务器环境:CentOS7+nginx1.16+php7.0+mysql8.0
服务器的网站在高并发时偶尔会挂掉,nginx报502
重启php-fpm后恢复正常,经过数次错误被客户投诉后,下定决心要解决这个问题
既然是重启php-fpm后恢复正常,那就从php着手。
1、找到php的错误日志文件,查看
vi /var/log/php-fpm/error.log
发现大量warning
错误提示建议增加pm.start_servers数量
2、找到php-fpm的配置文件
vi /etc/php-fpm.d/www.conf
修改以下几个值,改大一些
当服务器内存较小时,使用php默认的dynamic(动态)模式
#动态方式,子进程的数量根据以下指令动态设置:pm.max_children, pm.start_servers, pm.min_spare_servers, pm.max_spare_servers pm = dynamic #static模式下创建的子进程数或dynamic模式下同一时刻允许最大的php-fpm子进程数量 pm.max_children = 15 #动态方式下的起始php-fpm进程数量 pm.start_servers = 15 #动态方式下服务器空闲时最小php-fpm进程数量 pm.min_spare_servers = 10 #动态方式下服务器空闲时最大php-fpm进程数量 pm.max_spare_servers = 40
经验人士的总结:
一般php-fpm进程占用20~30m左右的内存,就按30m算。如果单独跑php-fpm,动态方式起始值可设置物理内存Mem/30M,由于大家一般Nginx、MySQL都在一台机器上,于是预留一半给它们,即php-fpm进程数为$Mem/2/30。
当服务器内存较大时,使用static(静态模式),如本服务器内存是16G,便可以使用此模式
#静态方式,子进程的数量由pm.max_children确定 pm = static #static模式下创建的子进程数或dynamic模式下同一时刻允许最大的php-fpm子进程数量 pm.max_children = 256
参考:
http://www.imooc.com/article/33300
本帖已被设为精华帖!