nginx 日志记录状态码 499 问题

2016-02-16 19:06:33 +08:00
 liuzhedash

系统组成: nginx 1.6,php5.3.28 ,对应配置:

location ~ [^/]\.php(/|$)
{
# comment try_files $uri =404; to enable pathinfo
try_files $uri =404;
fastcgi_pass unix:/tmp/php-cgi52.sock;
fastcgi_index index.php;
include fastcgi.conf;
#include pathinfo.conf;
}

nginx 日志摘要

221.11.61.197 - - [16/Feb/2016:18:46:38 +0800] "GET /api/agent/registerAgent HTTP/1.1" 10.954 - -499 0 "-" "Mozilla/5.0 (iPhone; CPU iPhone OS 9_2_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Mobile/13D15 MicroMessenger/6.3.13 NetType/3G+ Language/zh_CN" -

其中的

10.954 - - 499

分别是:

$request_time $upstream_response_time $upstream_status $status

$request_time 从几十秒到一秒多不等,$upstream_response_time $upstream_status 为"-"直观效果就是某几个手机一直打不开页面,其他的手机电脑完全正常。
研究了半天没有任何思路,请大家赐教

8124 次点击
所在节点    NGINX
15 条回复
jkeylu
2016-02-16 19:51:55 +08:00
499 是用户主动断开连接
就是请求页面长时间没有返回,用户等不急了,把页面关了
$upstream_response_time 就是 nginx 请求你的 PHP 程序到返回数据的时间,没等到返回数据,用户就关闭页面里,所以是 - ,多半是你程序问题
会不会某个时段用户访问比较集中啊,导致程序运行缓慢之类的
liuzhedash
2016-02-16 20:10:25 +08:00
@jkeylu 同样的页面,其他手机 /PC 访问是正常的,速度也很快,现在发现重启 php-fpm 后可以立刻使不能访问的手机可以正常打开页面。
服务器负载非常低,基本是空载
Andy1999
2016-02-16 20:12:18 +08:00
PHP5.3 貌似低了点 可以无缝升级到 PHP5.6.17 吧
lhbc
2016-02-16 20:13:21 +08:00
代码有问题
php 开 slowlog 看下吧
liuzhedash
2016-02-16 20:19:27 +08:00
@lhbc slowlog 没有东西, sql 慢查询也没有,代码里调试得到的结论是:有问题的请求根本没把 php 调起来。事实上之前这个问题从来没有出现过
liuzhedash
2016-02-16 20:20:12 +08:00
@Andy1999 已经加了一台实例,准备迁移过去用高版本 php 和 nginx 试试看
jwnlive
2016-02-16 20:46:09 +08:00
php err 有什么报错吗
看下数据库的链接正常不
liuzhedash
2016-02-16 21:22:38 +08:00
@jwnlive 没有什么报错,数据库也正常,其他的手机 PC 访问同样的页面都是 OK 的
liuzhedash
2016-02-16 22:11:43 +08:00
一个新的线索:关闭微信(这个场景的浏览器是微信内置浏览器 ),再次打开,就可以正常打开页面
squid157
2016-02-16 22:14:46 +08:00
@liuzhedash 微信内置浏览器并不好 debug 啊 我也来围观学习一下
liuzhedash
2016-02-16 22:41:59 +08:00
php-fpm 重启可以使得等待状态的请求立刻 502 ,所以怀疑问题在 php-fpm 这里
tntsec
2016-02-16 22:50:44 +08:00
搜索相关问题一直找不到解决方法,最后终于在 google 上搜索到一英文论坛上有关于此错误的解决方法:
proxy_ignore_client_abort on;
Don ’ t know if this is safe.
就是说要配置参数 proxy_ignore_client_abort on;
表示代理服务端不要主要主动关闭客户端连接。

另外把 php-fpm 进程数开到最大
ryd994
2016-02-16 23:18:54 +08:00
这个是客户端关闭连接时,不关闭到上游的连接,只丢弃上游的响应
这个很不 safe
进程数随便调最大也是逗,就等着被 CC 卡死吧
ToughGuy
2016-02-17 09:13:57 +08:00
似乎是某些异步请求会出现 499 错误

fastcgi_ignore_client_abort on;
proxy_ignore_client_abort on;

这两个参数可能有用。
liuzhedash
2016-02-17 14:17:47 +08:00
谢谢大家的指导,已经确认是后端 php 代码对 session 锁处理不当导致执行超时,和 nginx php-fpm 无关

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/256919

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX