今天一个接口,不理解一个逻辑很简单的接口怎么会失败。因为我们的的架构是ofe+nginx+php,熟悉这个架构的人都知道,错误码通常是php-fpm对应的fastcgi进程处理不过来请求导致的。
状态码也叫网关错误,通常是因为并发请求高超过php-fpm处理能力,导致nginx没有从upstream收到正确的返回结果。
nginx
从上面的图中可以看到,upstream_time超过了5s,而正常的请求只需要10ms左右。乍一看像是超时,因为nginx.conf里面配置的fastcgi_connect_timeout是5s。
upstream上的nginx日志同样是,和ofe上基本一样。
从nginxerror.log可以看出似乎是phpfastcgi没有按时返回结果。
php
问题大概率是出在php层或者业务代码。查看php7-fpm-error.log日志发现问题时间点fastcgi出现过重启。
一度怀疑是php出问题了。
php-fpm允许的最大子进程数是,也就是同时有个fastcgi可以处理并发请求,如果超过了这个数就会出现雪崩,导致网关错误。但是查看机器负载和当时的请求数,还没有那么多。
接着分析pool.d/php7-