测验:缓冲 · 正文大小 · 连接复用
访问日志留下 200 ut=0.049 rt=4.173,正确的首要调查方向是什么?
- 先查上游应用和 DB 慢查询
- 上游已经结束,检查响应传输和缓冲设置
- 两个值不同,说明日志格式错误
- 上游健康检查失败并触发重试
生产中几乎发现不了 an upstream response is buffered to a temporary file,最大原因是什么?
- 它是 debug 级别,默认不记录
- 临时文件立即删除,所以日志也消失
- 它是
[warn],不会触发 error 级日志或 error 字符串告警 - 同一请求以 502 结束,被 5xx 告警掩盖
同一 8MB 响应,开启缓冲时为 ut=0.049 rt=4.173,关闭时为 ut=3.188 rt=3.189。这些数字说明什么?
- 关闭缓冲让响应更快到达
- 关闭缓冲后,上游会被占用到客户端收完
- 开启缓冲让上游处理变慢
- 两条路径上游不同,无法比较
client_max_body_size 与 client_body_buffer_size 有什么区别?
- 前者决定请求正文,后者决定响应正文大小
- 前者是拒绝阈值,后者决定正文在内存中的缓冲大小
- 前者只能用于 http 块,后者只能用于 location 块
- 前者是硬限制,后者是同一数值的软限制
为启用上游 Keep-Alive,已在 upstream 块设置 keepalive 16;,location 中也设置 proxy_http_version 1.1;,但 10 次请求仍建立 10 个上游连接。缺少什么?
proxy_set_header Connection "";- 在 upstream 块同时设置
keepalive_timeout proxy_socket_keepalive on;- 在
upstream块的server行设置max_conns
连接无法复用的系统平时正常,流量增加后大量出现 502。最合理的解释是什么?
- 每次请求新建套接字,TIME_WAIT 堆积并耗尽端口,连接被拒绝
- 连接增多使上游响应头变大,超过代理缓冲
- 不复用时 nginx 会排队直到读取超时
- 上游先关闭 keepalive,nginx 放弃重试