问题描述:
近期平台对外开放了数据查询接口,在数据量特殊大时,返回结果韶光可能会超过3秒,接口开放后,系统本身调用没有问题,其他第三方平台接入时,总会报链接超时问题;
问题缘故原由:

查看tomcat日志无任何缺点,一开始以为是tomcat吸收参数最大限定问题,对tomcat做了一次整体优化,修正连接数、修正post限定,问题仍存在;那问题可能出在nginx转发上面;
经排查,而在nginx中涌现了499的缺点,官方阐明是nginx定义的一个状态码,用于表示这样的缺点:
缺点缘故原由
1、nignx做proxy时,频繁的post,nginx认为不屈安,记录499
可以在nignx的proxy配置中开启 proxy_ignore_client_abort on 功能是:确定在客户端关闭连接时是否该当关闭与代理做事器的连接,而不再等待相应
如果利用了proxy_ignore_client_abort on。 那么客户端主动断掉连接之后,Nginx 会等待后端做事器处理完(或者超时),然后记录“后真个返复书息”到日志。因此,如果后端返回200,就记录200 ;如果后端返回5XX ,那么就记录 5XX。
如果超时(默认60s,可以用 proxy_read_timeout 和proxy_send_timeout设置),Nginx 会主动断开连接,记录504
2、做事器返回http头之前,客户端就提前关闭了http连接,客户端要求做事端时,做事端相应慢,客户端以为韶光长主动关闭了连接, 比如浏览器(客户端)要求一个接口以为很慢,就关掉了浏览器、 nginx做proxy的时候,后端实行韶光长(如实行sql慢,调用其它接口慢)等,该当从后端去优化下,
通用办理方案:
1.499网上的阐明是客户端主动关闭了连接
在一个项目上传文件的时候,nginx log报499,关闭iptables就可以
2.从打消故障的方法来说
nginx->tomcat,问题就出在这两个上面看nginx的要求是否在日志里面能创造,这次是post要求是499看tomcat的日志,是否有非常
3.从网络层,运用层,从下至上打消
iptables和网络方面的问题
4.利用工具
tcpdumptcpdump -XvvennSs 0 -i eth0 tcp[20:2]=0x4745 or tcp[20:2]=0x4854 -w /tmp/post.logtcpdump -i eth0 '((port 8000) and (tcp[(tcp[12]>>2):4]=0x47455420))' -nnAl -w /tmp/GET.log0x4745 是post要求
5、设置客户端连接超时时间
创造第三方的要求是用的httpclient代理模式,而httpclient的链接超时时间设置的是2秒,在做事端还未返回数据是,就关闭了链接,调大httpclient的链接超时时间即可;