系统组成: 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&qu抗投诉服务器ot; -
其中的
10.954 - - 499
分别是:
$request_time $upstream_response_time $upstream_status $status
$request_time 从几十秒到一秒多不等,$upstream_response_time $upstream_status 为"-"直观效果就是某几个手机一直打不开页面,其他的手机电脑完全正常。
研究了半天没有任何思路,请大家赐教
499 是用户主动断开连接
就是请求页面长时间没有返回,用户等不急了,把页面关了
$upstream_response_time 就是 nginx 请求你的 PHP 程序到返回数据的时间,没等到返回数据,用户就关闭页面里,所以是 - ,多半是你程序问题
会不会某个时段用户访问比较集中啊,导致程序运行缓慢之类的
同样的页面,其他手机 /PC 访问是正常的,速度也很快,现在发现重启 php-fpm 后可以立刻使不能访问的手机可以正常打开页面。
服务器负载非常低,基本是空载
PHP5.3 貌似低了点 可以无缝升级到 PHP5.6.17 吧
代码有问题
php 开 slowlog 看下吧
slowlog 没有东西, sql 慢查询也没有,代码里调试得到的结论是:有问题的请求根本没把 php 调起来。事实上之前这个问题从来没有出现过
已经加了一台实例,准备迁移过去用高版本 php 和 nginx 试试看
php err 有什么报错吗
看下数据库的链接正常不
没有什么报错,数据库也正常,其他的手机 PC 访问同样的页面都是 OK 的
一个新的线索:关闭微信(这个场景的浏览器是微信内置浏览器 ),再次打开,就可以正常打开页面
微信内置浏览器并不好 debug 啊 我也来围观学习一下
php-fpm 重启可以使得等待状态的请求立刻 502 ,所以怀疑问题在 php-fpm 这里
搜索相关问题一直找不到解决方法,最后终于在 google 上搜索到一英文论坛上有关于此错误的解决方法:
proxy_ignore_client_abort on;
Don ’ t know if this is safe.
就是说要配置参数 proxy_ignore_client_abort on;
表示代理服务端不要主要主动关闭客户端连接。
另外把 php-fpm 进程数开到最大
这个是客户端关闭连接时,不关闭到上游的连接,只丢弃上游的响应
这个很不 safe
进程数随便调最大也是逗,就等着被 CC 卡死吧
似乎是某些异步请求会出现 499 错误
fastcgi_ignore_client_abort on;
proxy_ignore_client_abort on;
这两个参数可能有用。
谢谢大家的指导,已经确认是后端 php 代码对 session 锁处理不当导致执行超时,和 nginx php-fpm 无关