超时时间connectTimeout,socketTimeout,proxy_read_timeout,proxy_connect_timeout笔记

1、一般的的情况

客户端(connectTimeout,socketTimeout) -- 七层接入proxy (connect timeout, read timeout, keepalive timeout, send timeout)-- nginx (proxy_read_timeout,proxy_connect_timeout)-- 后端服务器

connectTimeout:建连时间

socketTimeout:等待数据的时间

2、为什么?

程序中设置了connectTimeout, socketTimeout可以防止阻塞,具体地:

如果没有connectTimeout,建立tcp链接时,阻塞,假死;

如果没有socketTimeout,已经建立的tcp链接,在传输过程中,发送的报文可能会因为网络中断引起程序阻塞,假死;

需要注意的是,socket建连时,如果网络层不可达,会直接抛异常,而不是等connectTimeout耗尽。

3、在什么情况下会出现超时?

从1中的各个层面设置的超时时间看,任何一个环节的超时,都可能引起整个结果的超时。

4、举个例子

场景:客户端请求某个链接,链接功能是拿到大数据30天统计的结果。

无论怎么尝试结果都是502,gateway Timeout。

原因:后端处理数据所用的时长超过了proxy_read_timeout或者是proxy read timeout时间限制。(当然这里也有可能其他情况……)

ref:https://blog.csdn.net/wangjun5159/article/details/78140648

猜你喜欢

转载自blog.csdn.net/wangtingting_100/article/details/85219347
今日推荐