Rock笔记
~/rocknotes/articles/298.md article
// article · linux

PHP-fpm 高并发下挂掉

服务器环境:CentOS7+nginx1.16+php7.0+mysql8.0


服务器的网站在高并发时偶尔会挂掉,nginx报502

image.png

重启php-fpm后恢复正常,经过数次错误被客户投诉后,下定决心要解决这个问题


既然是重启php-fpm后恢复正常,那就从php着手。


1、找到php的错误日志文件,查看

vi /var/log/php-fpm/error.log

发现大量warning

image.png

错误提示建议增加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

https://www.cnblogs.com/feng18/p/6224638.html

https://www.cnblogs.com/doseoer/p/5966464.html

回复// 0 replies

最新回复 ↓
// 暂无回复

回复功能沿用原详情页:前往原页面参与讨论 →