PHP-fpm 高并发下挂掉

Linux tytrock ⋅ 于 2019-12-25 17:34:37 ⋅ 4232 阅读

服务器环境: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
    暂无评论~~
    • 请注意单词拼写,以及中英文排版,参考此页
    • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`, 更多语法请见这里 Markdown 语法
    • 支持表情,使用方法请见 Emoji 自动补全来咯,可用的 Emoji 请见 :metal: :point_right: Emoji 列表 :star: :sparkles:
    • 上传图片, 支持拖拽和剪切板黏贴上传, 格式限制 - jpg, png, gif
    • 发布框支持本地存储功能,会在内容变更时保存,「提交」按钮点击时清空
    Ctrl+Enter