虚惊一场的一次事故,在事故中学习

news2024/9/21 4:23:37

上周日吃着晚饭时,“叮叮”两声,老板在QQ上单独M我。

“服务器好像崩了”
“昨天和前天在线人数猛猛下滑 现在更是只有879人在线了”

看完消息,我震惊了,忙用筷子将碗中剩下的饭菜一股脑扒拉到嘴里,来到书桌前坐下,打开笔记本查看问题。

上周五,我确实提交了不少代码,也确实没有进行过多的测试。难道就这样出问题了?

查看阿里云监控

我打开阿里云的监控,cpu基本上维持在3%左右,太低了!不正常,至少也要20~30%。难道真的崩溃了?内存7%左右,属于正常,因为HTTP服务器和RPC服务器基本上用不到多少内存。

查看容器运行情况

打开阿里云Client,查看服务器容器运行情况,一切良好,所有微服务服务器都在运行中。看来服务器没有崩溃。

查看容器运行错误日志

我打开登陆服务器相关的日志,里面有不少没见过的错误。一般都是找不到用户。但是为什么呢?

服务器启动上一版本

一时之间没发现问题,家里虽然开着空调,我的肚皮上也都是汗水。先不管那么多吧,先把服务器启动为上个版本,先保证线上安全,再去找问题吧。于是jenkins简单操作一番,服务器还原上个版本。

这一下心里踏实多了,CPU的使用率应该会逐渐增加吧?

10分钟过去了,涨了一丢丢,没太大变化。20分钟过去了,反而降低了,之后一直没好转。

意外

“叮叮”,同事发来信息,告诉我。周六下午,大批用户无法上线。客户端在周五提交了一个版本,但当时没事。不知为何周六下午就出事了。而且同事自己可以登录,另一位同事上不去。

我使用远端控制,用单位自己的机器登录,也是上不去的,提示我获取Token失败。难道和客户端的提交有关?

我们客户端提交后,会更新服务器后台的MD5,MD5验证通过用户才能正常登录。难道和MD5有关系。

我打开钉钉,发现钉钉MD5报警达到了2万多次。初步怀疑是版本问题。

这时,瞌睡虫起了作用,我的脑袋开始昏懵。继续下去,会影响第二天工作,也不利于解决问题。于是跟老板回复,初步判断是这个问题,明天再和客户端同事对对,共同查看问题。

nginx

第二天,来到单位,和同事不多寒暄,直接进入正题。同事反馈,有时能登陆,有时登陆不了。

我继续查看日志,和前一天在家显示的日志相同。我根据日志信息,查看相关逻辑没发现问题。但一些登陆的用户名称,在数据库中查不到。查不到就说明用户根本没进来。

因为什么呢?难道是nginx的代理问题?我们的nginx会监听某个域名的80端口,然后将请求转发给阿里云服务器上的微服务。

于是找到nginx日志目录,打算查看登入和错误日志。我用vim直接打开日志,卡、无响应,根本打不开。

我一看日志容量,有四十多G,vim可不是打不开嘛!在此之前,我还真不知道vim打开大文件会无响应,又让我学会一招。我强行终止了vim的进程,使用网上学来的打开大文件的方法。不过可惜的是,没发现有什么大问题。

postman

于是我用postman访问登陆API,报错:Error: getaddrinfo ENOTFOUND 【我们公司域名】。

使用AI工具查询问题,给出我如下结论:

错误信息 “Error: getaddrinfo ENOTFOUND 【我们公司域名】” 表示在尝试解析域名 “【我们公司域名】” 时发生了错误。这个错误通常发生在以下几种情况:

  1. 域名不存在:域名 “【我们公司域名】” 可能不存在于 DNS(域名系统)中,或者没有正确注册。
  2. 网络连接问题:可能是因为你的服务器无法连接到 DNS 服务器,或者 DNS 服务器无法访问。
  3. 本地 DNS 缓存问题:本地 DNS 缓存可能过时或者出现故障。
  4. DNS 配置问题:服务器的 DNS 配置可能不正确,或者指向了一个无法访问的 DNS 服务器。

解决这个问题的步骤如下:

  1. 检查域名:确保域名 “【我们公司域名】” 是正确的,并且已经正确注册并指向了一个有效的 IP 地址。
  2. 检查网络连接:确保你的服务器可以访问互联网,并且没有防火墙或其他安全策略阻止了 DNS 查询。
  3. 刷新 DNS 缓存:你可以尝试清除本地 DNS 缓存。在 Linux 系统上,你可以使用以下命令:sudo systemd-resolve --flush-caches 或者:sudo nscd restart
  4. 检查 DNS 配置:检查服务器的 /etc/resolv.conf 文件,确保配置了正确的 DNS 服务器地址。
  5. 使用其他 DNS 服务器:如果可能,尝试将 DNS 服务器更改为一个公用的 DNS,如 Google 的 8.8.8.8 和 8.8.4.4,或者 Cloudflare 的 1.1.1.1
  6. 诊断工具:使用诸如 nslookup 或 dig 这样的工具来诊断 DNS 解析问题。nslookup 【我们公司域名】 或者:dig 【我们公司域名】

因为我对于nginx不是很熟,判断不是nginx的问题,因此我直接使用第6号步骤。发现nslookup根本找不到【我们公司域名】。

好吧,我相信看到这里,很多人都知道发生了什么。但我不知道,我还缺少运维相关的一些知识。

破案

于是,我只能询问一位运维朋友,他让我用curl访问,我访问回复错误消息:“未能解析此远程名称”。

而运维朋友在他那边,同样适用curl访问,确能得到数据。我当时又是惊奇又是惊喜。

难道是我的命令输入有误?当然不是!

他明确告诉我说,是域名解析出了问题。在网上搜索这个域名,在8月2日已经过期了,因此访问不了。

哦!原来是这样!但为啥3号才大批量上不去呢?朋友告诉我,因为DNS有缓存。DNS会把解析结果缓存到客户端,这样客户端就可以访问,而不需要向服务器请求。但DNS缓存会有一个失效时间,过了时间,就会向服务器请求,服务器的域名过期,那就访问不到了。

我找到域名管理负责人,让他对域名进行续费,问题迎刃而解。

成长

在这次事故中,我学到了几点知识,和大家分享,希望遇到和我相同的问题,大家可以从容不迫解决,少走一些弯路。

一、vim打开大文件

vim不要直接打开上几十G的大文件,因为它会将文件内容暂存在内存中,很快内存就会耗光,服务器会无响应。这时,应该使用以下几种方法(>temp.log相当于导出为另一文件,没有这个会直接显示):

1.查看文件的前100行
head -100 /data/nginx/log/error.log > temp.log
2.查看文件的后200行
tail -200 /data/nginx/log/error.log > temp.log
3.查看文件100行至300行
sed -n '100,300p' /data/nginx/log/error.log > temp.log
4.查看符合条件的文件内容
cat /data/nginx/log/error.log | grep 'notice' > test.log
5.实时查看文件内容
tail -f /data/nginx/log/error.log

二、域名(DNS)前缀

购买的域名可以设置多个前缀,比如我的网站域名为skycreator.top,那么我就可以设置www.skycreator.top,也可以增加code.skycreator.top,当用户在浏览器输入www.skycreator.top或者code.skycreator.top都可以查看我的网站。

三、域名(DNS)解析

我们平时浏览器访问的各个网站,实际上都是对应一个ip地址(如125.38.24.139)。但ip地址我们的大脑很难记忆,因此才有了域名这一概念。

www.baidu.com就是一个域名,skycreator.top也是一个域名。但凡域名都是需要花钱购买的,当然也有少部分不花钱的域名。域名会与一个ip地址相联系,比如我这里访问百度网址的ip地址就是110.242.68.4。

当输入www.baidu.com时,服务器会自动将你的请求链接到110.242.68.4。如果baidu.com域名过期了,输入www.baidu.com大概率是访问不到的。能访问到是因为域名缓存。

域名缓存,是为了避免用户频繁访问服务器而暂存到用户终端上的信息。一般域名缓存都有过期时间,时间到了,会自动在服务器上获取域名相关信息。这个过期时间在购买域名平台的后台管理里可以设置。


以上就是这篇文章的全部内容,谢谢大家阅读。

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

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

相关文章

华为OD机试-转盘寿司(C++ Java Python)

题目描述:寿司店周年庆&#xff0c;正在举办优惠活动回馈新老客户。寿司转盘上总共有n盘寿司&#xff0c;prices[i]是第i盘寿司的价格&#xff0c;如果客户选择了第i盘寿司&#xff0c;寿司店免费赠送客户距离第i盘寿司最近的下一盘寿司j&#xff0c;前提是prices[j]<prices…

RISC-V (七)外部设备中断

中断的分类 -本地中断 -software interrupt&#xff08;软终端&#xff09; -timer interrupt&#xff08;定时器中断&#xff09; -全局中断 -external interrupt&#xff08;外部中断 &#xff09; qemu主要是参考FU540-C000这款芯片做出来的&#xff0c;可以经常看一下这款…

学习yolo+Java+opencv简单案例(三)

主要内容&#xff1a;车牌检测识别&#xff08;什么颜色的车牌&#xff0c;车牌号&#xff09; 模型作用&#xff1a;车牌检测&#xff0c;车牌识别 文章的最后附上我的源码地址。 学习还可以参考我前两篇博客&#xff1a; 学习yoloJavaopencv简单案例&#xff08;一&#xff0…

ES5到ES6 js的语法更新

js是一门弱语言类型&#xff0c;为了实现更有逻辑的代码&#xff0c;需要不断更新语法规范&#xff0c;es就是用来规范js语法的标准。 09年发布了es5&#xff0c;到15年发布es6&#xff0c;到现在es6泛指es5.1以后的版本es2016&#xff0c;es2017。 var、let、const 关键字&…

Promise学习之基本方法

前言 上一篇章我们学习了Promise的概念、基本使用、状态等等&#xff0c;对于Promise也有了基础的了解&#xff0c;那本章就对与Promise的方法作基本学习&#xff0c;去了解了解Promise提供了什么方法。 一、then then处理Promise返回结果&#xff0c;接收两个回调函数 第一…

新建一个基于标准新建一个基于标准固件库的工程模板固件库的工程模板(实现LED单灯闪烁)

实验报告原件在资源可选择性下载 一、实验目的&#xff1a; 1.了解STM32固件库&#xff1b; 2.掌握STM32固件库关键子目录及固件库关键文件&#xff1b; 3.能够新建一个基于标准固件库的工程模板并完成编译 二、实验器材&#xff1a; 笔记本或电脑。 三、实验内容&#…

大投资模型 arxiv 量化论文

郭建与沉向阳 摘要 传统的量化投资研究面临着回报递减以及劳动力和时间成本上升的问题。 为了克服这些挑战&#xff0c;我们引入了大型投资模型&#xff08;LIM&#xff09;&#xff0c;这是一种新颖的研究范式&#xff0c;旨在大规模提高绩效和效率。 LIM 采用端到端学习和通…

数据结构系列-归并排序

&#x1f308;个人主页&#xff1a;羽晨同学 &#x1f4ab;个人格言:“成为自己未来的主人~” 归并排序 递归版本 首先&#xff0c;我们来看一下归并的示意图&#xff1a; 这是归并排序当中分解的过程。 然后便是两个两个进行排序&#xff0c;组合的过程。 归并完美的诠释…

docker镜像,ip,端口映射,持久化

docker 镜像的迁移&#xff1a;导出和导入镜像 查看镜像&#xff1a; [rootdocker ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE centos latest 5d0da3dc9764 2 years ago 231MB 打包 将镜像打包&#xff0c;找到save,可以将…

远程在电脑上玩PS5《黑神话:悟空》?借助极空间实现PS5远程串流攻略

远程在电脑上玩PS5《黑神话&#xff1a;悟空》&#xff1f;借助极空间实现PS5远程串流攻略 哈喽小伙伴们好&#xff0c;我是Stark-C~ 这两天的《黑神话&#xff1a;悟空》可谓是火爆出圈呀&#xff01;虽说我也是第一时间体验到了这款可以说是划时代意义的首款国产3A大作&…

maven 依赖管理(4)

依赖就是项目里运行的jar 一个项目可以设置多个依赖 这种的 1.依赖传递 直接依赖&#xff1a;就是当前自己的项目pom里的依赖 间接依赖&#xff1a;在自己pom文件引入别人的项目 就能共享到别人项目的依赖 2.依赖传递冲突问题 路径优先&#xff1a;出现相同依赖&#xff0…

华为数通方向HCIP-DataCom H12-821题库(更新单选真题:1-10)

第1题 1、下面是一台路由器的部分配置,关于该配置描述正确的是? [HUAWEllact number 2001 [HUAWEl-acl-basic-2001]rule 0 permit source 1.1.1.1 0 [HUAWEl-acl-basic-2001]rule 1 deny source 1.1.1.0 0 [HUAWEl-acl-basic-2001]rule

SSRF+Redis+Fastcgi

目录 1、打redis 2、打fastcgi 3、SSRF绕过 4、SSRF防御 1、打redis ssrfme靶场实战 页面直接给出了代码&#xff0c;过滤了file: dict ,等等 但是下面我们看到只要有info就能打印phpinfo() 通过phpinfo()打印的信息&#xff0c;发现有内网其他服务器的ip 直接访问 发现…

漏洞挖掘 | 浅谈一次edusrc文件上传成功getshell

0x1 前言 这里记录一下我在微信小程序挖人社局等一些人力资源和社会保障部信息中心漏洞&#xff0c;人社这类漏洞相对于web应用端的漏洞来讲要好挖很多&#xff0c;里面的WAF过滤等一些验证也少。比如你在开始学习src漏洞挖掘&#xff0c;就可以从微信小程序下手。 一般像这类…

Python编码系列—Python CI/CD 实战:构建高效的自动化流程

&#x1f31f;&#x1f31f; 欢迎来到我的技术小筑&#xff0c;一个专为技术探索者打造的交流空间。在这里&#xff0c;我们不仅分享代码的智慧&#xff0c;还探讨技术的深度与广度。无论您是资深开发者还是技术新手&#xff0c;这里都有一片属于您的天空。让我们在知识的海洋中…

(7)JavaSE:注解与反射

一、注解 1.1什么是注解 Annotation 是从JDK5.0开始引入的新技术 。 作用: &#xff08;1&#xff09;不是程序本身 , 可以对程序作出解释.(这一点和注释(comment)没什么区别) &#xff08;2&#xff09;可以被其他程序(比如:编译器等)读取.使用范围&#xff1a; &#xff0…

Python进阶(十一)】—— Pandas和Seaborn可视化

&#x1f349;CSDN小墨&晓末:https://blog.csdn.net/jd1813346972 个人介绍: 研一&#xff5c;统计学&#xff5c;干货分享          擅长Python、Matlab、R等主流编程软件          累计十余项国家级比赛奖项&#xff0c;参与研究经费10w、40w级横向 文…

数字化与进制转换

1.数字化是什么&#xff1f; 数字化是将事物的属性转化为计算机可处理对象的过程。 2.数字化的好处&#xff1f; 可以让我们的生活&#xff0c;学习和工作更加便捷&#xff0c;大大提升我们学习和工作的效率。 3.如何将采集到的数据进行数字化&#xff1f; 可以通过两种信…

运维的利器–监控–zabbix–第三步:配置zabbix–网络–原理:通过ping实现网络连通性监控

文章目录 通过ping实现网络连通性监控1、参数说明2、建立监控项3、创建图形 通过ping实现网络连通性监控 1、参数说明 ICMPPING[,,,,]通过ICMP ping检查主机是否可以访问。 target-目标IP或者域名 packets-数据包数量 interval-间隔时间&#xff08;毫秒&#xff09; size-数…

Windows系统电脑安装多个Tomcat服务教程

文章目录 引言I 下载Tomcat安装包II 安装tomcat多个tomcat服务重命名Tomcat应用程序安装Tomcat服务安装和配置JRE配置服务信息III 知识扩展: windows RDP远程访问资源引言 需求: 基于Tomcat部署多个服务和站点都一台Windows机器 I 下载Tomcat安装包 https://tomcat.apache.o…