高并发下web服务器http异常状态码499/502/504分析
2018-03-01 10:54
1296 查看
环境说明压测工具:apache/ab
web服务器:NGINX/1.8.0 + PHP 5.6.25
php脚本:get.php
注:
nignx 设置超时fastcgi_connect_timeout 60
fastcgi_send_timeout 60
fastcgi_read_timeout 60php-fpm 设置超时
压测开始1.get.php源码
2.使用ab模拟10个client对get.php并发请求100次ab -c 10 -n 100 http://time-out.com/get.php结果分析情况一:每个php执行50s以上远大于超时时间(10s),fpm会自动发送kill信号(SIGTERM)给工作进程clild进程关闭。此时nginx与php-fpm的连接断开,nginx找不到对方,报502 Bad Gateway错误。
如图:fpm超时的处理 (php-fpm.conf)
如图:kill掉进程,重新启动fpm工作进程(php-fpm日志)
如图:nginx报502 Bad Gateway (nginx access.log)
情况二:client端(ab压测那端)等待不耐烦,关闭自身致使连接从客户端先断开,nginx检查到客户端已断开连接,则报499 code 。(注:其他情况如用户主动关闭浏览器等)
如图:nginx报499
如图:nignx对499的定义
情况三: 重新设置nginx超时为5s,再次压测,此时未等php超时,nginx已经超时了,nginx报504 Gateway Time-out
如图:nginx报504 Gateway Time-out
总结:第一种是php-fpm没设置超时,即request_terminate_timeout 设置为0,永不超时。我们常见的状态码是504或499,原因是要么nginx超时,要么用户等不耐烦关闭连接。
第二种情况是php-fpm设置超时如10s,常见的状态码是502或者504,也有可能499。另外由于并发高,php-fpm工作进程都在忙,没有可用的工作进程,此时常见502 Bad Gateway。还有一种是php-fpm挂了或没启动,同理也是502。
web服务器:NGINX/1.8.0 + PHP 5.6.25
php脚本:get.php
注:
nignx 设置超时fastcgi_connect_timeout 60
fastcgi_send_timeout 60
fastcgi_read_timeout 60php-fpm 设置超时
request_terminate_timeout 10
压测开始1.get.php源码
<?php for ($i=0; $i < 50; $i++) { # code... sleep(1); }
2.使用ab模拟10个client对get.php并发请求100次ab -c 10 -n 100 http://time-out.com/get.php结果分析情况一:每个php执行50s以上远大于超时时间(10s),fpm会自动发送kill信号(SIGTERM)给工作进程clild进程关闭。此时nginx与php-fpm的连接断开,nginx找不到对方,报502 Bad Gateway错误。
如图:fpm超时的处理 (php-fpm.conf)
如图:kill掉进程,重新启动fpm工作进程(php-fpm日志)
如图:nginx报502 Bad Gateway (nginx access.log)
情况二:client端(ab压测那端)等待不耐烦,关闭自身致使连接从客户端先断开,nginx检查到客户端已断开连接,则报499 code 。(注:其他情况如用户主动关闭浏览器等)
如图:nginx报499
如图:nignx对499的定义
情况三: 重新设置nginx超时为5s,再次压测,此时未等php超时,nginx已经超时了,nginx报504 Gateway Time-out
如图:nginx报504 Gateway Time-out
总结:第一种是php-fpm没设置超时,即request_terminate_timeout 设置为0,永不超时。我们常见的状态码是504或499,原因是要么nginx超时,要么用户等不耐烦关闭连接。
第二种情况是php-fpm设置超时如10s,常见的状态码是502或者504,也有可能499。另外由于并发高,php-fpm工作进程都在忙,没有可用的工作进程,此时常见502 Bad Gateway。还有一种是php-fpm挂了或没启动,同理也是502。
相关文章推荐
- System.Web.HttpException: 无法向会话状态服务器发出会话状态请求。
- System.Web.HttpException: 无法向会话状态服务器发出会话状态请求。
- .NET HttpWebResponse.GetResponse() 基础连接已经关闭: 服务器关闭了本应保持活动状态的连接。
- web服务器异常处理及性能分析初步
- 异常详细信息: System.Web.HttpException: 服务器太忙
- 查看Web服务器(Nginx Apache)的并发请求数及其TCP连接状态
- [置顶] 【web】HTTP状态返回码介绍,客户端请求服务器端,服务器返回状态码的含义介绍整理。
- 客户端服务器TCP链接异常状态分析
- nginx后端服务器返回给nginx502、504、404、执行超时等错误状态的解决方法
- 查看Web服务器(NginxApache)的并发请求数及其TCP连接状态
- web服务器,网站nginx报502与504错误分析
- Web服务器高并发的解决方案&TCP沾包问题&服务器TIME_WAIT异常
- 异常:"System.Net.WebException: 请求因 HTTP 状态 401 失败:Unauthorized。"
- HttpWebResponse.GetResponse() 基础连接已经关闭: 服务器关闭了本应保持活动状态的连接。
- nginx后端服务器返回给nginx502、504、404、执行超时等错误状态的解决方法
- HTTP请求的502、504、499错误
- HttpWebResponse.GetResponse() 基础连接已经关闭: 服务器关闭了本应保持活动状态的连接。
- C#WebService异常:服务器未能识别 HTTP 头 SOAPAction 的值
- 各种HTTP状态汇总 (web服务器请求服务报错提示)
- HttpWebRequest抓取网页数据返回异常:远程服务器返回错误: (503) 服务器不可用