100ms的SQL把服务器搞崩溃了

100ms的SQL把服务器搞崩溃了,第1张

一个项目上线了两个月,除了一些反馈的优化和小Bug之外,项目一切顺利;前期是属于推广阶段,可能使用人员没那么多,当然对于项目部署肯定提前想到并发量了,所以早就把集群安排上,而且还在测试环境搞了一下压测,绝对是没得问题的;但是,就在两个月后的一天,系统突然跑的比乌龟还慢,投诉开始就陆续反馈过来了。

经过排查,原来是频繁执行一条耗时100ms的SQL导致,100ms感觉不长,但就是把系统搞崩了,具体细节如下。

项目采用ABP进行开发,集成统一的认证中心(IDS4),部分数据对接第三方系统,拆分后的这个项目架构相对简单。

考虑并发量不高,就算是高峰期也不会超过1000,于是就搞了个单台的数据库服务器(MySQL),测试环境中经过压测,完全能抗住。

上线时,由于线上资源的关系,DB服务器的配置没有按测试环境的标准来分配,相关人员想着后续看情况进行补配。上线推的比较紧,简单评估了配置风险,初步判断没啥大问题,于是就推上线了。

相关技术栈:ABP、IdentityServer4、Autofac、AutoMapper、QuartzNET、EF Core、Redis、MySQL等,这都不重要,重要的是100ms的SQL把系统搞崩了。

由于系统相对不大,并没有把分布式日志、调度监控,性能监控集成上去。

上线期间,前期处于使用推广阶段,一切正常。两个月后的一天,系统处于使用高峰时段,突然陆续收到反馈:系统有点卡!!!于是赶紧进行排查。

由于系统已经是集群部署的,慢这个问题首先怀疑是数据库服务器,于是让DBA的同事排查了一下,没有锁,只是有大量事务等待提交(waiting for handler commit),通过如下命令可查的:

看到都是插入审计日志记录导致,一看日志记录频率,差不多一秒500条记录。DBA同事说可能是记录插入频繁导致,此时CPU已经爆到100%了,为了快速解决问题,于是就赶紧关掉了一些不必要的日志记录。

这么一改,稍微降了一点,没有事务提交的记录,系统勉强可以撑着用,但是CPU还是在85%~97%波动;

看到这种情况,当然还是不放心,继续排查。 中间有对服务器的配置产生过怀疑,但非常肯定的是这不是主要原因,于是和DBA的同事继续排查。

系统虽然可以正常使用,但时不时的也看看监控屏,CPU一直处于高水位状态,还是有点慌的,因为一有问题,信息和电话都要爆。

突然DBA同事发现有一个单表查询的SQL执行比较频繁,于是单独拿出来试了一下,查询时间150ms左右,这个表的数据量不大,8万左右,但没有加任何索引,因为想着数据量不大,查询时长还可接受,所以当时就没有加相关索引。

定位到这条SQL后,想到的第一步就是增加索引,在测试环境上试了一把,执行效率直接飞速提高到1ms;效果如下:

所以和DBA同事达成一致意见,在生成环境上增加复合索引( 创建索引一定要注意字段顺序 ),在中午时候,系统使用频率不太高,于是就在生成上快速加了索引,我去,CPU一下降到了20%以内,意不意外;就算在使用高峰期,也没超过20%,通过zabbix工具监控看到CPU的效果:

问题算是解决了,总算松了一口气。

这里有个问题: CPU都爆了为什么没有报警提醒,这块DBA同事正在排查相关配置。这里发现CPU爆了,还是无意的远程到服务器,发现很卡,一看CPU才知道爆了。

系统虽小,问题不大,但其实暴露的问题还是挺多。

这次线上小事故暂时分享到这,因为项目不大,所以没有做那么多监控,但以下建议,小伙伴可以参考一下:

文章来自>不可以,Windows 10不能用来修复Windows Server 2016服务器。Windows 10和Windows Server 2016是不同的 *** 作系统,它们之间不兼容。如果Windows Server 2016服务器崩溃,您可以使用Windows Server 2016的恢复工具来修复它。

先开CCP 在帐号里面新建一个帐号密码自己设但要记住IP里面写127001 然后开Easy2Game在服务器设置里的服务器写127001 端口选1080 帐号和密码就是你刚刚在CCP写的帐号和密码再测试 然后就可以卡剧情了

答案很简单:攻击服务器。
攻击服务器的方法也是有很多种的,这里介绍一下用PING命令使网络瘫痪的方法,我们知道,PING命令可以向目标主机发送数据包,但是这里存在一个漏洞,就是当你向目标主机发送的数据包超过65532byt时,就会造成目标主机死机或者重启。所以,微软公司就限制了数据包的大小,使发送的数据包不能超过65500byt但是,即使是65500的数据包,如果不断的发送,也会造成目标主机的瘫痪,黑客们用这个命令:ping -1 655 00 -t 1921681025(输入的IP地址是要攻击的主机的IP,这里是随便举个例子)这个命令会向目标主机不断的发送65500的数据包,直到系统瘫痪为止,一般不会超过10分钟。例如,黑客向网吧服务器发送这个命令,不是服务器瘫痪,就是整个网吧掉线。黑客就乘机接管服务器。但这里还有个问题,如何获得服务器的IP呢?其实很简单,只要用扫描工具扫描一下本机IP,将最后一个数值改为1就可以了,比如本机的IP是1921681023,那么服务器的IP就是192168101这样,黑客入侵网吧服务器的全过程就完了

为表达全国各族人民对抗击新冠肺炎疫情斗争牺牲烈士和逝世同胞的深切哀悼,4 月 3 日,国务院就发布了公告:决定 2020 年 4 月 4 日举行全国性哀悼活动。

公告发出当天,国内游戏厂商大面积宣布停服。

腾讯游戏、网易游戏都表示将在 4 月 4 日将自己旗下运营的所有游戏产品停服一天,各大视频平台如哔哩哔哩番剧、腾讯视频、优酷视频、爱奇艺等也宣布停更。


腾讯公司

1998年11月11日,马化腾和同学张志东在广东省深圳市正式注册成立“深圳市腾讯计算机系统有限公司”,之后许晨晔、陈一丹、曾李青相继加入。当时公司的业务是拓展无线网络寻呼系统,为寻呼台建立网上寻呼系统,这种针对企业或单位的软件开发工程是所有中小型网络服务公司的最佳选择。

2010年3月5日,19时52分58秒,腾讯QQ最高同时在线用户数突破1亿,这是人类进入互联网时代以来,全世界首次单一应用同时在线人数突破1亿。

1网络紊乱

网络紊乱可能原因可能有很多,如路由器失败,主干网链接失败,或网线头松动都可能造成网络紊乱,最终造成网络或主机不可达。当发出去的包没有收到确认时,TCP会进行重传,直到中间的路由器发送一个ICMP消息来说明网络或主机不可达,然后发送RST。

2服务器进程崩溃

简单来说就是服务器主机上面的服务器进程挂掉了,服务器进程挂掉之后将会给对等方发送FIN,当发送FIN后并不表示服务器已经不能再接收数据了。当客户端接收到FIN后,再次给服务端发送数据,此时服务端会返回RST。如果客户端又一次给服务端发送数据,则此时客户端进程自动挂掉。

3服务器主机崩溃

在谈到这个问题时,不要把和服务端进程崩溃搞混了。服务器主机崩溃时是不会给对等方发送FIN的,这就是它们的区别。当服务器主机崩溃时,客户端啥都收不到。客户端向往常一样给服务器发数据,但是一直接收不到确认,客户端会进行超时重传,当重传达到一定次数就会返回超时,然后重置连接

4服务器主机崩溃后重启

当服务器主机崩溃后,原先的服务器进程不存在了,套接字也不存在了,故连接也不存在了。当服务器收到客户端发送的数据时,服务器会返回RST。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zz/13516769.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-08-23
下一篇 2023-08-23

发表评论

登录后才能评论

评论列表(0条)

保存