解决一个偶现的503 bug,花了俺不少时间
概述
在3月2日晚上,大概8点左右,本想打道回府,回家休息,突然被人在bug群@了一下,说是管理后台,访问不了,界面上出现了:
503 service temporarily unavailable
我赶紧尝试访问了一下,确实如此,但不是每次都不行,而是偶发503的错误提示。当时我是没有立刻动手去定位问题,而是先拉了一个临时处理群,这样做的原因是:
- 先将线上出故障了这件事情同步出去,要让相关的人知道,像运维、测试、你的上级、产品等;
- 一定是先止损,优先【线下去处理故障】,而不是【直接在线上处理故障】;
群拉完后,我简单同步现象后,就开始分析了,首先想的第一点就是:
是不是因为做了线上变更导致的,比如有发版之类的。
从这个点切入去想的原因是源于自己处理线上故障的经验,大部分都是发版导致的,能回滚的优先回滚,第一时间降低影响。因此我打开了发版日历(技术团队是有维护一个发版日历的,记录了每次发版或者变更的内容),发现3月2号当天,在线上做了如下两件事情:
- 部分服务接入了阿里云WAF,这个是因为安全原因,需要接入;
- 管理后台对应的前后端服务,确实也发版了;
火速电话公司的安全专家,先临时关闭WAF,但关闭后没有用,访问管理后台还是一直出现503提示,没办法了,得立刻回滚当天上线的内容,正当运维要操作回滚的时候,我反而制止了它。因为:
管理后台突然又能访问了。
😂,跟产品和业务方确认了一下,他们也反馈系统恢复了。好吧,这个也算一个好消息,毕竟可以给技术团队多一些时间去定位问题。
系统临时性恢复后,我这边也就没那么大的压力和紧迫感了,静下心来开始着手仔细分析,找出根因。
分析过程
是否有突增的流量过来
使用阿里云的SLS日志平台,写了个简单的脚本,执行后发现,流量一直很平滑。虽然是管理后台的服务,但是还是要先看看流量的,因为有可能有一些定时任务或者重量级业务操作,导致疯狂的调用管理后台服务。
是否是发版导致的?
由于发版的内容还不少,很难一下子分析出是哪些代码导致的,只能利用阿里的日志平台以及监控平台,从故障发生的时间范围里,寻找一些蛛丝马迹。
首先是查看故障时间内,对应的后端服务有无返回状态码非200的,可以使用阿里的SLS日志平台,写个简单命令查询一下即可:
xxxx_app_id:yyyy not statusCode: 200
上面的一些查询字段,是可以在SLS上自己定义的。最终发现返回的状态码都是200的,这个就有点奇怪,但还是继续看一下有无异常日志。
xxxx_app_id:yyyy and logLevel: ERROR
发现也没有,初步判断,不是后端代码上线导致的,便转而开始用阿里云的监控平台观察后端服务pod节点的运行情况,但也没有什么收获,pod既无重启的情况,内存、CPU usage也都正常,也没有什么慢的请求。
当时就有点摸不着北了,由于那会也比较晚了,后台管理系统也暂时没有出现问题了,我就先回家了。而隔天又有其他重要紧急的事情要处理,我就忘记去跟这个事情了,一直到3月6号早上,又开始出现503问题了,持续时间是两分钟,然后就又自己恢复了。
这次我就把手头上的事情先全部放下,全力跟进这个问题。经过3月2号晚上的分析,感觉跟后端服务没有关系,那会不会是前端的node服务有问题呢? 当然平时如果线上出故障,我很少认为会是前端问题,都是先从后端服务定位起。
但这次没办法,死马当活马医,于是便到阿里云上去看一下前端pod节点的运行情况,发现有重启的情况,我感觉发现新大陆了,马上去确定pod重启时间,但是很遗憾,我没权限看,就临时去看一下这个pod的内存波动情况,一般来说,pod有重启的话,内存会短暂释放,果然,在故障期间,前端的pod的内存占用有下降的趋势,然后故障后的几秒,内存占用又恢复了日常水平。
于是便火急火燎的跑去找了一下运维:
把前端的xxx pod有重启的情况,我怀疑管理后台503问题,是这个原因导致的,你能不能把这个pod重启前的日志发我一下。
当时运维回复说,重启前的日志找不到了哦。当然,这句话我是不信的。就让运维去查一下或者找阿里云的售后,看看怎么拿到pod重启前的日志。果然,可以使用kubectl命令,找到日志:
kubectl describe pod xxxx-pro-vyyyyyyyy | grep 'State: ’ -A 5
日志里有几个信息:
- 一个是pod重启前的代码报错日志;
- 一个是pod具体的重启时间;
- 一个是Exit Code,这个code等于1,说明pod重启,是服务自身的报错导致的。
报错日志如下:
TypeError [ERR_HTTP_INVALID_HEADER_VALUE]: Invalid value “undefined” for header “Content-Length”
到此,基本就清楚了,请求先经过阿里WAF和阿里nginx-ingress后,由nginx-ingress转发给前端的service,进而进入到pod,但是由于pod同一时间都在重启,暂时无法提供服务,service这一层就不知道pod的状态,nginx-ingress自然也就无法知道service的状态,于是便返回了503。等重启完毕后,就又正常提供服务,之所以偶发的出问题,原因就在这里。
于是便找了前端的开发leader去定位原因,最后他回复说,要改一个底层文件,兼容一下Content-Length为空的情况,改完后,简单在在测试环境和预发布环境测试一下,过一下核心主流程,没问题后,就上线了。
从3月9日上线到现在,暂时没有发现503问题了。
那灵魂一问来了,这个底层文件,从2021年来一直都没有改动过,也没出过啥事,为啥最近才开始出问题呢?
答案是:
比较难查,不知道是哪些请求会没有Content-Length,但肯定是发版导致的。
相关文章:
解决一个偶现的503 bug,花了俺不少时间
概述 在3月2日晚上,大概8点左右,本想打道回府,回家休息,突然被人在bug群了一下,说是管理后台,访问不了,界面上出现了: 503 service temporarily unavailable我赶紧尝试访问了一下,确…...
什么是栈,如何实现?
欢迎来到 Claffic 的博客 💞💞💞 “但有一枝堪比玉,何须九畹始征兰?” 前言: 栈是一种特殊的线性表,就像开盖的桶一样,从底部开始放数据,从顶部开始取数据,那么栈具体是…...
在我的MacBook上捣鼓ESP8266
周三是我们的篮球日,打篮球后总是会有些兴奋,然后就容易睡不着,额,睡不着就拿我的ESP8266开发板出来捣鼓一下。先下载编译工具链https://github.com/espressif/ESP8266_RTOS_SDK下载sdkgit clone https://github.com/espressif/ES…...
【深度强化学习】(8) iPPO 模型解析,附Pytorch完整代码
大家好,今天和各位分享一下多智能体深度强化学习算法 ippo,并基于 gym 环境完成一个小案例。完整代码可以从我的 GitHub 中获得:https://github.com/LiSir-HIT/Reinforcement-Learning/tree/main/Model 1. 算法原理 多智能体的情形相比于单智…...
77.qt qml-QianWindow-V1版本界面讲解
上章介绍: 76.qt qml-QianWindow开源炫酷界面框架简介(支持白色暗黑渐变自定义控件均以适配) 界面如下所示: 代码结构如下所示:...
RHCE学习日记二
1、在 node1 主机上配置 chrony 时间服务器,将该主机作为时间服务器。 命令: vim /etc/chrony.conf 在文件位置添加命令: #Use public servers from the pool.ntp.org project. #Please consider joining the pool (https://www.pool.ntp.org…...
Dubbo原理简介
Dubbo缺省协议采用单一长连接和NIO异步通讯,适合于小数据量大并发的服务调用,以及服务消费者机器数远大于服务提供者机器数的情况。 作为RPC:支持各种传输协议,如dubbo,hession,json,fastjson,底层采用mina,netty长连接…...
JavaSE基础总结
JDK与JRE JDK,全称Java Development Kit,Java开发工具包 JRE,全称Java Runntime Environment,Java运行环境 JDK包含后者JRE。 JDK也可以说是Java SDK(Software Development kit,软件开发工具包)…...
5G(NR)信道带宽和发射带宽---频率资源
前言 查看此文之前建议先看看这篇 5G(NR)频率资源划分_nr运营商频段划分_达帮主的博客-CSDN博客NR频率有上面几个划分 ,可以使用低于1GHz的频端,既可以使用高于30GHz高频端。使用频端高于30GHz那我们称之为高频或者毫米波。使用毫米波是5G网络区别于4G…...
基于Spring Boot的酒店管理系统
文章目录 项目介绍主要功能截图:登录首页房间类型酒店预约部分代码展示设计总结项目获取方式🍅 作者主页:Java韩立 🍅 简介:Java领域优质创作者🏆、 简历模板、学习资料、面试题库【关注我,都给你】 🍅文末获取源码联系🍅 项目介绍 基于Spring Boot的酒店管理系统…...
Ae:混合模式
Ae 中内置了 Ps 的渲染引擎,同样可在多处应用混合模式 Blending Mode。与 Ps 相比,除了两组图层通道相关的特定模式,其它的混合模式几乎是一模一样。相关快捷键:下一图层混合模式:Shift 上一图层混合模式:…...
JS中的变量
系列文章目录 前端系列文章——传送门 JavaScript系列文章——传送门 文章目录系列文章目录前言1、概念2、定义变量3、变量名的规则4、变量本质5、赋值6、常用操作前言 相对于青龙面板来说,变量就是你填入青龙的cookie,简称ck 在实际项目中࿰…...
Hadoop运行模块
二、Hadoop运行模式 1)Hadoop官方网站:http://hadoop.apache.org 2)Hadoop运行模式包括:本地模式、伪分布式模式以及完全分布式模式。 本地模式:单机运行,只是用来演示一下官方案例。生产环境不用。伪分…...
Web自动化——前端基础知识(二)
1. Web前端开发三要素 web前端开发三要素 什么是HTMl? Html是超文本标记语言,是用来描述网页的一种标记语言HTML是一种标签规则的形式将内容呈现在浏览器中可以以任意编辑器创建,其文件扩展名为.html或.htm保存即可 什么是CSS?…...
NAS系列 硬件组装
转自我的博客文章https://blognas.hwb0307.com/nas/3260,内容更新仅在个人博客可见。欢迎关注! 前言 之前我在《NAS系列 硬件选择》里讲述了自己为了升级NAS如何选配硬件。本节我大概说一些我的新NAS硬件组装的注意事项。到目前为止,我只装过…...
IDAFrida
IDA&Frida 前言 偶然间发现了一本秘籍《IDA脚本开发之旅》,这是白龙的系列文章,主要是安卓平台,笔者只是根据他的知识点学习,拓展,可以会稍微提及别的平台。本文并不会贴出他的思路分析,只对于源码进…...
通过百度文心一言大模型作画尝鲜,感受国产ChatGPT的“狂飙”
3月16日下午,百度于北京总部召开新闻发布会,主题围绕新一代大语言模型、生成式AI产品文心一言。百度创始人、董事长兼首席执行官李彦宏,百度首席技术官王海峰出席,并展示了文心一言在文学创作、商业文案创作、数理推算、中文理解、…...
Nacos 注册中心 - 健康检查机制源码
目录 1. 健康检查介绍 2. 客户端健康检查 2.1 临时实例的健康检查 2.2 永久实例的健康检查 3. 服务端健康检查 3.1 临时实例的健康检查 3.2 永久实例服务端健康检查 1. 健康检查介绍 当一个服务实例注册到 Nacos 中后,其他服务就可以从 Nacos 中查询出该服务…...
Transformer在计算机视觉中的应用-VIT、TNT模型
上期介绍了Transformer的结构、特点和作用等方面的知识,回头看下来这一模型并不难,依旧是传统机器翻译模型中常见的seq2seq网络,里面加入了注意力机制,QKV矩阵的运算使得计算并行。 当然,最大的重点不是矩阵运算&…...
快速入门Zookeeper技术.黑马教程
快速入门Zookeeper技术.黑马教程一、初识 Zookeeper二、ZooKeeper 安装与配置三、ZooKeeper 命令操作1.Zookeeper 数据模型2.Zookeeper 服务端常用命令3.Zookeeper 客户端常用命令四、ZooKeeper JavaAPI 操作五、ZooKeeper JavaAPI 操作1.Curator 介绍2.Curator API 常用操作2.…...
网易C++实习一面
说下C11新特性 auto有没有效率上的问题?为什么?发生在什么时候? 说下单例模式 什么时候需要加锁,什么时候不需要加锁? 像printf这样的函数,自己本身不修改数据,但是其他人会修改数据&#x…...
进程和线程的区别和联系
进程和线程的区别和联系1. 认识线程2. 进程和线程的关系3. 进程和线程的区别4. 线程共享了进程哪些资源1. 上下文切换2. 线程共享了进程哪些资源1.代码区2. 数据区3. 堆区1. 认识线程 线程是进程的一个实体,它被包含在进程中,一个进程至少包含一个线程,一个进程也可以包含多个…...
Java学习笔记——集合
目录集合与数组的对比集合体系结构Collection——常见成员方法Collection——迭代器基本使用Collection——迭代器原理分析Collection——迭代器删除方法增强for——基本格式增强for——注意点Collection——练习集合与数组的对比 package top.xxxx.www.CollectionDemo;import …...
差分运放公式推导-运算放大器
不知道大家有没遇到这种情况,在计算电路的时候,有时候会突然的忘记一些公式啊啥的,需要回去翻看笔记或者查资料,知其然而不知其所以然。今天跟大家一起来一起推导一遍差分运放的计算过程。 计算过程其实归根结底还是根据运放的虚…...
金丹二层 —— 字符串长度求解的四种方法
前言: 1.CSDN由于我的排版不怎么好看,我的有道云笔记比较美观,请移步有道云笔记 2.修炼必备 1)入门必备:VS2019社区版,下载地址:Visual Studio 较旧的下载 - 2019、2017、2015 和以前的版本 (m…...
深入剖析Linux——进程信号
致前行的人: 要努力,但不着急,繁花锦簇,硕果累累都需要过程! 目录 1.信号概念 1.1生活角度的信号 2. 技术应用角度的信号 3.Linux操作系统中查看信号 4.常用信号发送 4.1通过键盘发送信号 4.2调用系统函数发送信号 4.3…...
API-Server的监听器Controller的List分页失效
前言 最近做项目,还是K8S的插件监听器(理论上插件都是通过API-server通信),官方的不同写法居然都能出现争议,争议点就是对API-Server的请求的耗时,说是会影响API-Server。实际上通过源码分析两着有差别&am…...
jupyter notebook 进阶使用:nbextensions,终极避坑
jupyter notebook 进阶使用:nbextensions,终极避坑吐槽安装 jupyter_contrib_nbextensions1. Install the python package(安装python包)方法一,PIP:方法二,Conda(推荐)&…...
C 语言编程 — Doxygen + Graphviz 静态项目分析
目录 文章目录目录安装配置解析Project related configuration optionsBuild related configuration optionsConfiguration options related to warning and progress messagesConfiguration options related to the input filesConfiguration options related to source brows…...
Mybatis报BindingException:Invalid bound statement (not found)异常
一、前言 本文的mybatis是与springboot整合时出现的异常,若使用的不是基于springboot,解决思路也大体一样的。 二、从整合mybatis的三个步骤排查问题 但在这之前,我们先要知道整合mybatis的三个重要的工作,如此才能排查&#x…...
seo网站上线前分析/如何在百度发广告
服务器配置---服务器地址(URL) :报错 token验证失败。 原因之一是: 开发调试环境(本机) 的ip变化,没有及时配置ip白名单。 也可以反向验证:在配置好jeewx工程之公众号信息后,可以点击按钮“重置…...
乡镇网站个人做可以不/百度搜索网址
本篇文章是对上篇prepareContext的补充,在该方法的执行过程中,遍历了最初从META-INF/spring.factories文件中加载到的ApplicationContextInitializer,依次调用了其initialize方法 回顾第一篇文章,SpringApplication初始化的时候&…...
做网站可行性分析/爱战网关键词挖掘
正向代理和反向代理的概念 代理服务(Proxy),通常也称为正向代理服务。 如果把局域网外Internet想象成一个巨大的资源库,那么资源就分布到了Internet的各个点上,局域网内的客户端要访问这个库里的资源就必须统一通过代理…...
网站打开是404错误/南京关键词网站排名
Web 前端学习 之servlet技术(一) Servlet技术简介 手动实现Servlet程序 要求: 实现如下功能 1、编写一个类去实现Servlet 接口2、实现service 方法,处理请求,并响应数据3、到web.xml 中去配置servlet 程序的访问地址 1.idea创建module 在之前已经创…...
dedecms建网站/太原百度快速优化排名
项目中遇到过很多次ZCU器件添加观测核报这个错误,测试发现这种情况比较容易出现在 JESD这类接口调试过程中,也即外部时钟芯片输出的时钟给PL端的ILA观测时出现 这种错误很多都是由于实际情况的确没有时钟的情况下,排除这个情况再就是时钟太低…...
深圳微信定制开发/绍兴seo公司
我有一个python函数,总共运行12次.我目前设置这个设置来使用多处理库中的池来并行运行所有这些池.通常我一次运行6,因为该功能是CPU密集型的并且并行运行12经常导致程序崩溃.当我们一次做6时,第二组6将不会开始,直到所有前6个过程完成.理想情况下,我们希望另一个(例如第7个)一旦…...