我爱编程

nginx499错误

2018-06-11  本文已影响0人  goodx2study

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脚本改为

<?php

    sleep(10);

    echo 11;

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

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

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

tcpdump抓包结果

上一篇下一篇

猜你喜欢

热点阅读