nginx 502,gdb 调试php-fpm子进程异常退出

在部署LNMP环境下,遇到PHP-FPM异常退出导致Nginx返回502错误。通过设置core dump路径和调整ulimit,使用gdb定位到问题源头为Redis认证错误。修正Redis密码后,问题得以解决。
摘要由CSDN通过智能技术生成

今天项目上线,在新的vps上部署了一套lnmp,原本部署php项目早就已经轻车熟路,谁知竟然翻车了,后来祭出gdb才最终搞定了php-fpm异常退出导致nginx 502 的bug,经查,据说这个bug是php7.3以后才有,未经考证,记录下处理过程

错误

[07-Jul-2020 18:05:35] WARNING: [pool www] child 25159 exited on signal 11 (SIGSEGV) after 99.606752 seconds from start
[07-Jul-2020 18:05:35] NOTICE: [pool www] child 25408 started
[07-Jul-2020 18:05:36] WARNING: [pool www] child 25155 exited on signal 11 (SIGSEGV) after 100.420225 seconds from start
[07-Jul-2020 18:05:36] NOTICE: [pool www] child 25410 started
[07-Jul-2020 18:05:36] WARNING: [pool www] child 25156 exited on signal 11 (SIGSEGV) after 101.007471 seconds from start
[07-Jul-2020 18:05:36] NOTICE: [pool www] child 25411 started
[07-Jul-2020 18:05:37] WARNING: [pool www] child 25160 exited on signal 11 (SIGSEGV) after 101.356937 seconds from start

设置core dump的生成路径

echo "/tmp/core.%p" > /proc/sys/kernel/core_pattern

修改ulimit允许生成 core dump

ulimit -c unlimited

重启php-fpm

service php-fpm restart

请求之前502的接口

查看/tmp文件夹,发现很多core.xxx文件

关闭ulimit

ulimit -c 0

gdb /usr/local/php/sbin/php-fpm -c /tmp/core.28826

Program terminated with signal 11, Segmentation fault.
#0  0x00007fe0a2a8d4a1 in redis_spprintf (redis_sock=redis_sock@entry=0x7fe0a927d240, slot=slot@entry=0x0, ret=ret@entry=0x7ffe4b02da20, kw=kw@entry=0x7fe0a2ab8220 "AUTH",
    fmt=fmt@entry=0x7fe0a2ab7790 "S") at /tmp/pear/temp/redis/library.c:855
855	/tmp/pear/temp/redis/library.c: No such file or directory.

一眼扫过去,瞬间锁定问题,大大的AUTH,猜想基本可能是redis的认证出问题了,然后去看了一下,果然,redis的密码没有设置正确,设置redis连接的正确密码后,php-fpm 进程退出的问题顺利解决

这里欠一个技术债,最近开发太忙了,下一篇文章,补上这个发生的真正原因

 

原文:https://www.luyunhua.work/99.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值