9问502

news2024/12/26 11:00:01

一、502意味着什么

502 Bad Gateway是指错误网关,无效网关;在互联网中表示一种网络错误。表现在WEB浏览器中给出的页面反馈。它通常并不意味着上游服务器已关闭(无响应网关/代理) ,而是上游服务器和网关/代理使用不一致的协议交换数据。鉴于互联网协议是相当清楚的,它往往意味着一个或两个机器已不正确或不完全编程。

根据百科词条说明,502错误是浏览器上游服务器问题,那么上游服务器就有Nginx和Server两种。挨个进行排查。

首先Server如果导致502,也就是服务不响应的情况可能有两种原因 ,一是 服务宕机或者假死  二是tomcat的链接数被占满,新到的socket链接被tomcat直接拒绝导致的。

其次是nginx,经过查询资料,nginx具有限流和健康检查机制,会将nginx认为不可用的服务进行下线,进而直接返回502.

二、错误排查

 1 、首先是服务器(因为最熟悉)

                                                                                          图1

                                                                                         图2

监控结果如图1所示,tomcat的线程数量在502错误报出的是时候,线程数量没有被占满。所以不会存在Tomcat的acceptCount被占满,进而Tomcat直接拒绝链接的情况。

监控结果如图2所示,server的cpu也是种比较低一些,查看服务日志也是没有出现服务宕机和假死的情况。

2、nginx排查

 

通过查看nginx的access日志发现 502报错,执行时间是0.00秒,也就是nginx并没有向server发起请求,二是直接返回前端了,印证了Server和Tomcat并没有问题的思路。

排查nginx的error日志发现 502的时候nginx都是先出现timeout 几次,然后就是no live upstreams while connecting to upstream。

至此,基本确定是nginx的健康检查机制造成的502问题。

三、原因分析

1、nginx原因分析:

nginx的检查机制相关的配置参数说明

问题:两台服务并没有宕机,为什么会no live upstreams

答:nginx默认配置有健康检查机制。nginx做反向代理,如果后端节点服务器宕掉的话,还会有请求转发到后端的这台realserver上面,这样势必造成网站访问故障。并且因为upstream 里面设置了ip_hash。所以导致访问网站时怎么刷新都是有问题的,所以nginx为了避免上述情况,对nginx后方realserver的健康状态进行检查,如果发现后端服务器不可用,则请求不转发到这台服务器。当两台服务都被标记为不可用的时候,请求就不转发到server,而由nginx直接返回502.

问题:服务不可用是如何判定的?

答:nginx有两个参数设置用来判定服务不可用以及不可用时间:fail_timeout 和 max_fails

默认值fail_timeout为10s,max_fails为1次。该参数的意思是:转发给后端服务时,若10s发现后端服务故障1次,则将请求转发给其他节点进行处理,并将服务器标记为故障、在10s时间内不再转发给故障服务器。10s后重试转发给故障服务器,若仍旧不成功则重复刚才的操作;

这也刚好印证了mdata用户出现502的时候,很快又不会再报错502 ,正是因为这个10秒的恢复时间。

问题:服务器标记故障的依据是什么

答: nginx的失败判定其由proxy_next_upstream定义,不过,不管proxy_next_upstream如何配置,error,timeout,invalid_header都将被认为是失败。

根据nginx的日志,mdata本次502问题正是因为链接超时导致的。

问题: 超时引起的,那么这个超时是什么超时

答:根据nginx的官网说明,共有三个类型的超时:tcp链接建立超时,读超时,写超时,超时时间配置项分别是:

proxy_connect_timeout ; #nginx服务器与被代理的服务器建立连接的超时时间,默认60秒
proxy_read_timeout ; #nginx服务器想被代理服务器组发出read请求后,等待响应的超时间,默认为60秒。
proxy_send_timeout ; #nginx服务器想被代理服务器组发出write请求后,等待响应的超时间,默认为60秒。

问题:本次502的超时是哪一个呢

答:经过排查,本次502属于读超时,根据nginx的日志可以看到no live upstreams 错误的前几个请求大部分是/getdistinct接口。该接口的作用是从用户配置的视图中查询中维度信息,具体逻辑是select distinct from (用户视图),根据追踪,fsgbi-vip这个库压力比较大,用户的sql属于关联查询,所以很难在60s内返回全表扫描才能获取的数据。所以该接口超时概率较大,尤其是在fsgbi-vip进行数据加工,回溯的时候。具体排除服务的原因,会在tomcat原理分析和Server分析进行说明。

2、Tomcat原理分析

 

问题:Tomcat会导致502和超时吗。

答:是可能的。Tomcat作为sevlet的容器,内部有一个工作线程池和一个TCP链接的队列

有三个参数与该场景有关,进行简要说明:

acceptCount值调整(默认100):accept队列的容量。该队里用来保存那些完成三次握手建立连接,等待工作线程处理响应,没得到service的tcp连接。

maxThreads值调整(默认200):worker线程池的大小,代表最大的并发请求数

当acceptCount的值设置的太小的时候,当请求量大的时候,accept已经满了,无法接受TCP连接。操作系统无法给tomcat建立更多的连接(无法完成三次握手),系统进行自我保护,当超出负载能力的时候,迅速fail fast,返回503。

当maxThreads太小,或者服务压力比较大时,accept队列中的链接如果一直没得到service,则client得不到响应,出现read timeout,最糟糕的情况是连接在accept队列等待了很久,等到能得到worker线程服务的时候,已经超时了,这样其实浪费了很多连接。

问题:本次现象和Tomcat有关吗

答:经过上述说明,结合Tomcat监控可以看到current_threads 稳定在75左右,远没有达到maxThreads,所以accept队列是空的,Tomcat也就不会直接拒绝三次握手,也就不会出现502情况

3、server原理分析

问题:mdata服务哪个地方可能会导致超时进而导致502

答:mdata服务内部是通过druid连接池获取链接查询数据库的,所以druid连接池的一些逻辑会导致查询超时

1 连接池中为避免占用gp宝贵的链接,mdata的配置牺牲了高效性,将链接空闲时间设置的较低,导致很多查询会走建立连接的过程。且重试机制会导致超时。

2 看板配置的单图和筛选器较多,并发请求量很大,导致有些查询连接池总的链接长时间获取不到,进而导致超时。

3 查询时间长,gp数据量很大,借据明细,授信明细表类的单图,可能会全表扫描,gp压力大的时候,查询较慢,可能超时。

问题:超时问题如何解决

答:

1链接重拾机制计算,将重试次数和时间控制在nginx的超时时间内。

2 连接池的等待时间修改,小于nginx的readtime时间

3 jdbc的connection的查询时间理论上也需要设置查询时长来控制链接占用时间,但考虑到有缓存机制,所以暂时没有更改,执行时间是无限时长。

四、问题解决方案

针对以上排查出来的问题进行处理解决:

短期方案:

1、nginx的proxy_read_timeout修改为300s,该值目前基本覆盖了mdata的90以上的sql查询时间。

2、nginx的健康检查机制修改:fail_timeout为10s,max_fails为5次,5是取值大部分看板的筛选器的数量。避免多个筛选器并发导致检查失败。

3、tomcat的链接由200 改为800 

长期方案:

1、短链接和长链接进行拆分。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/25688.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

latex 模板使用技巧——参考文献篇

参考文献说明: 一、 常用参考文献类型 1、会议 (INPROCEEDINGS) 示例: INPROCEEDINGS{rcnn,title{Rich feature hierarchies for accurate object detection and semantic segmentation},author{Girshick, Ross and Donahue, J…

骨传导耳机是利用什么原理听歌?什么骨传导耳机好用

这几年来骨传导耳机的火热程度不言而喻,很多运动人士手上必有一款骨传导耳机,也随着骨传导耳机的兴起,越来越多小伙伴都加入了运动当中。当然,也有很多小伙伴是不知道骨传导耳机的,更不知道骨传导耳机有什么作用&#…

KESION(.NET版)安装方法

若是windows2008系统,访问xxxxxx.com - xxx sex videos free hd porn 资源和信息。 安装界面没有样式加载,请先编辑web.config 去掉 <defaultDocument> <files> <clear /> <add value"index.aspx" /> </files> </defaultDocume…

Android App开发手机阅读中PDF文件渲染器的讲解及使用(附源码 简单易懂)

需要源码和图片集请点赞关注收藏后评论区留言~~~ 一、PDF文件渲染器 Android集成了PDF的渲染操作&#xff0c;从很大程度上方便了开发者&#xff0c;这个PDF文件渲染器便是PdfRenderer。渲染器允许从存储卡读取PDF文件 打开PDF文件只是第一步&#xff0c;接下来使用PdfRender…

Java FreeMarker模板引擎注入深入分析

0x01 前言 最近和 F1or 大师傅一起挖洞的时候发现一处某 CMS SSTI 的 0day&#xff0c;之前自己在复现 jpress 的一些漏洞的时候也发现了 SSTI 这个洞杀伤力之大。今天来好好系统学习一手。 有三个最重要的模板&#xff0c;其实模板引擎本质上的原理差不多&#xff0c;因为在…

CPT-MNPS/Fe3O4 NPs/Au NPs顺铂偶联磁性纳米粒子/四氧化三铁纳米粒子/金纳米粒子

小编下面整理了CPT-MNPS/Fe3O4 NPs/Au NPs顺铂偶联磁性纳米粒子/四氧化三铁纳米粒子/金纳米粒子&#xff0c;来看&#xff01; CPT-偶联纳米粒子 采用新工艺制备了包载盐酸阿霉素的明胶-泊洛沙姆纳米脂质体&#xff0c;并进行相关性能的表征。采用WW型明胶-泊洛沙姆乳液体系结合…

131. 分割回文串-思路整理

题目 给你一个字符串s&#xff0c;请你将 s分割成一些子串&#xff0c;使每个子串都是回文串。返回 s 所有可能的分割方案。 回文串: 是正着读和反着读都一样的字符串。 输入&#xff1a;s "aab" 输出&#xff1a;[["a","a","b"]…

Advances in Graph Neural Networks笔记4:Heterogeneous Graph Neural Networks

诸神缄默不语-个人CSDN博文目录 本书网址&#xff1a;https://link.springer.com/book/10.1007/978-3-031-16174-2 本文是本书第四章的学习笔记。 感觉这一章写得不怎么样。以研究生组会讲异质图神经网络主题论文作为标准的话&#xff0c;倒是还行&#xff0c;介绍了HGNN的常见…

【面试宝典】吐血整理的100道Java多线程并发面试题

吐血整理的108道Java多线程&并发面试题前言1、Java中实现多线程有几种方法2、继承 Thread 类 流程3、实现 Runnable 接口4、ExecutorService、 Callable、 Future 有返回值线程5、基于线程池的方式6、4 种线程池7、如何停止一个正在运行的线程8、notify()和notifyAll()有什…

Clean-label Backdoor Attack against Deep Hashing based Retrieval论文笔记

论文名称Clean-label Backdoor Attack against Deep Hashing based Retrieval作者Kuofeng Gao &#xff08;Tsinghua University&#xff09;出版社arxiv 2021pdf在线pdf代码无 简介&#xff1a;本文提出了首个针对 hashing 模型的 clean-label backdoor attack。生成 targeted…

图像传统处理算法-边缘检测-分割-增强-降噪

一、边缘检测 边缘检测的几种微分算子&#xff1a; 一阶微分算子&#xff1a;Roberts、Sobel、Prewitt 二阶微分算子&#xff1a;Laplacian、Log/Marr 非微分算子&#xff1a;Canny 一阶微分算子 1.Roberts: 没有经过图像平滑处理&#xff0c;图像噪声无法得到较好的抑制…

Proactive Privacy-preserving Learning for Retrieval 论文笔记

论文名称Proactive Privacy-preserving Learning for Retrieval作者Peng-Fei Zhang (University of Queensland)会议/出版社AAAI 2021pdf&#x1f4c4;在线pdf代码无代码概要&#xff1a; 本文提出了一种针对检索系统隐私保护的方法&#xff0c;称为 PPL。训练一个生成器&#…

SPARKSQL3.0-Optimizer阶段源码剖析

一、前言 阅读本节需要先掌握【SPARKSQL3.0-Analyzer阶段源码剖析】 Optimizer阶段是对Analyzer分析阶段的逻辑计划【logicalPlan】做进一步的优化&#xff0c;将应用各种优化规则对一些低效的逻辑计划进行转换 例如将原本用户不合理的sql进行优化&#xff0c;如谓词下推&am…

PCB设计仿真之探讨源端串联端接

作者&#xff1a;一博科技高速先生成员 孙宜文 上期高速线生简单介绍了反射原理也提到了源端串联端接&#xff0c;笔者借此篇文章再深入探讨下&#xff0c;本文使用Sigrity Topology Explorer 17.4仿真软件。 搭建一个简单的电路模型&#xff0c;给一个上升沿和下降沿均为0.5…

学会使用这些电脑技巧,可以让你在工作中受益无穷

技巧一&#xff1a;设置计算机定时关机 第一步&#xff1a;快捷键win r打开运行窗口。 第二步&#xff1a;输入&#xff1a;shutdown -s -t 3600&#xff0c;其中数字3600表示3600秒&#xff0c;就是设置3600秒后关机。第三步&#xff1a;按确定完成设置。如果你想取消设置&…

吃透这份高并发/调优/分布式等350道面试宝典,已涨30k

前言 这一次的知识体系面试题涉及到 Java 知识部分、性能优化、微服务、并发编程、开源框架、分布式等多个方面的知识点。 写这一套 Java 面试必备系列文章的初衷。 整理自己学过的知识&#xff0c;总结&#xff0c;让其成为一套体系&#xff0c;方便日后查阅。现在不少 Java …

【MySQL运行原理篇】底层运行结构

MySQL整体架构图 简略版图 1.1连接管理 一句话&#xff1a;负责客户端连接服务器的部分 网络连接层, 对客户端的连接处理、安全认证、授权等&#xff0c;每个客户端连接都会在服务端拥有一个线程&#xff0c;每个连接发起的查询都会在对应的单独线程中执行。服务器上维护一…

社交媒体营销策略——如何病毒式传播:增加受众范围的9个技巧

关键词&#xff1a;社交媒体营销、病毒式传播、受众 社交营销人员知道创建病毒式帖子并不是他们最重要的目标。事实上&#xff0c;这可能会分散他们接触目标受众和照顾团队心理健康的注意力。 这并不意味着您无法从病毒式传播的帖子和活动中学到一些东西。战略性病毒式营销可提…

5分钟搞懂https原理

概念 https&#xff08;超文本传输安全协议&#xff09;是一种以安全为基础的HTTP传输通道。 在了解HTTPS之前&#xff0c;我们首先来认识一下http&#xff1a; http&#xff08;超文本传输协议&#xff09;&#xff0c;HTTP是tcp/ip族中的协议之一&#xff0c;也是互联网上…

React项目使用craco(由create-react-app创建项目)

适用&#xff1a;使用 create-react-app 创建项目&#xff0c;不想 eject 项目但想对项目中 wepback 进行自定义配置的开发者。 1.使用 create-react-app创建一个项目&#xff08;已有项目跳过此步&#xff09; $ npx create-react-app my-project 2.进入项目目录&#xff0c;…