系统组成: 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 为"-"直观效果就是某几个手机一直打不开页面,其他的手机电脑完全正常。
研究了半天没有任何思路,请大家赐教
1
jkeylu 2016-02-16 19:51:55 +08:00 via Android
499 是用户主动断开连接
就是请求页面长时间没有返回,用户等不急了,把页面关了 $upstream_response_time 就是 nginx 请求你的 PHP 程序到返回数据的时间,没等到返回数据,用户就关闭页面里,所以是 - ,多半是你程序问题 会不会某个时段用户访问比较集中啊,导致程序运行缓慢之类的 |
2
liuzhedash OP @jkeylu 同样的页面,其他手机 /PC 访问是正常的,速度也很快,现在发现重启 php-fpm 后可以立刻使不能访问的手机可以正常打开页面。
服务器负载非常低,基本是空载 |
3
Andy1999 2016-02-16 20:12:18 +08:00 via iPhone
PHP5.3 貌似低了点 可以无缝升级到 PHP5.6.17 吧
|
4
lhbc 2016-02-16 20:13:21 +08:00
代码有问题
php 开 slowlog 看下吧 |
5
liuzhedash OP @lhbc slowlog 没有东西, sql 慢查询也没有,代码里调试得到的结论是:有问题的请求根本没把 php 调起来。事实上之前这个问题从来没有出现过
|
6
liuzhedash OP @Andy1999 已经加了一台实例,准备迁移过去用高版本 php 和 nginx 试试看
|
7
jwnlive 2016-02-16 20:46:09 +08:00
php err 有什么报错吗
看下数据库的链接正常不 |
8
liuzhedash OP @jwnlive 没有什么报错,数据库也正常,其他的手机 PC 访问同样的页面都是 OK 的
|
9
liuzhedash OP 一个新的线索:关闭微信(这个场景的浏览器是微信内置浏览器 ),再次打开,就可以正常打开页面
|
10
squid157 2016-02-16 22:14:46 +08:00 via iPhone
@liuzhedash 微信内置浏览器并不好 debug 啊 我也来围观学习一下
|
11
liuzhedash OP php-fpm 重启可以使得等待状态的请求立刻 502 ,所以怀疑问题在 php-fpm 这里
|
12
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 进程数开到最大 |
13
ryd994 2016-02-16 23:18:54 +08:00
这个是客户端关闭连接时,不关闭到上游的连接,只丢弃上游的响应
这个很不 safe 进程数随便调最大也是逗,就等着被 CC 卡死吧 |
14
ToughGuy 2016-02-17 09:13:57 +08:00
似乎是某些异步请求会出现 499 错误
fastcgi_ignore_client_abort on; proxy_ignore_client_abort on; 这两个参数可能有用。 |
15
liuzhedash OP 谢谢大家的指导,已经确认是后端 php 代码对 session 锁处理不当导致执行超时,和 nginx php-fpm 无关
|