记PHP-FPM一次奇怪的进程重启经历 - 猫猫得天空♂

/ 0评 / 0

记PHP-FPM一次奇怪的进程重启经历

最近在和恺英游戏XY平台对接. 整个流程都开发完毕. 直到对方上线到预发布环境后遇到见鬼的事.

由于是支付平台项目, 支付完成后需要调用对方的通知接口提示对方发货.之前已经调通的接口, 每次调用都无法正常返回, 并打断我的程序逻辑.而且会挂掉我当前的PHP-FPM进程,重启后重新发送请求, 在前端看来就是扣款后又回头重新调用了一次, 导致对方收到通知发货, 而我方确没有回到支付成功界面.

检查Nginx日志 发现通知接口进程异常关闭 (*131 recv() failed (104: Connection reset by peer) while reading response header from upstream)

1501670769562034

Tcpdump 抓包并没有发现任何问题

1501670642139601

Strace 跟踪后问题终于暴露了, 发起了请求,但是对方没有正确返回, 排除了Nginx PHP-FPM超时的可能, 猜测对方某个系统插入了异常数据导致接受失败重启了进程.

1501670932814885

正确的Log

1501671106477470

对方修改了代码后系统正常应答, 小坑一个

后续

早上再次出现, 尝试检查关闭原因,在FPM配置文件内关闭了超时退出设置, 程序可以正常跑了, 但是通知接口依然还是会超时

1501730787944152

慢日志

1501730819297203

最后发现服务器时间有问题, 测试被动过了...改回正常后就好了

结论, 坑爹的认证时间, FPM超时时间和系统时间并不一致,导致外来接口调用越过超时设置被关闭...

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注