php 499,nginx499错误

1、nginx报499,php慢日志,数量基本一致,每分钟1000+

2、相同版本程序,不同的是机房和后端服务。

首先看php慢日志,定位到具体的慢日志都是curl后端数据服务器慢,查看curl耗时日志,发现有一台数据服务器curl返回结果特别慢。

但是为什么会报499错误?之前遇到的curl慢导致的结果都是504timeout。

网上搜索http code 499,大概获取到的信息是

1、499是nginx自定义的httpcode

2、一般都是由客户端主动断开连接导致的

一番搜索下来并没有什么实质性结果。

转移方向从配置文件入手。

慢日志和499日志量基本一致,推断主要可能是超时引起的问题。

1、查看nginx的fastcgi配置的超时选项

fastcgi_connect_timeout 5s;

fastcgi_send_timeout 5s;

fastcgi_read_timeout 5s;

2、查看php-fpm配置

pm = static

pm.max_children = 500

以前遇到过504,是因为fastcgi_read_timeout 超时。看到fpm的配置,子进程是静态的,进而推测499 是由于每个请求耗时过长,导致fpm的子进程被用完了,fastcgi_connect_timeout 超时。

为证实这个推测,测试环境模拟fastcgi_connect_timeout。

将php-fpm的配置改成

pm = static

pm.max_children = 2

重启php-fpm

将php脚本改为

sleep(10);

echo 11;

curl 指定php脚本。观察curl结果输出和nginx日志。

发现3个curl命令在10秒或者10几秒后都能正常输出。推测失败。。。

多次尝试失败后,在curl等待时ctrl+c,日志中出现了499,结合之前搜索到的499产生原因,基本确认了499是由于响应太慢导致客户端直接断开连接了。

tcpdump抓包结果

54124bce4c04

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值