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才知道爆了。

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

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

文章来自>

1ping服务器IP,看网络是否正常

2网络正常情况下,一般重启服务器就可以

3重启服务器还是不行的话,看看远程服务是否被禁用,servicesmsc里面也要看看(一般不是这个原因)

4一般是注册表fDenyTSConnections被至1了,改为0就行HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server下的"fDenyTSConnections

服务器(英文名称server),也称伺服器。指一个管理资源并为用户提供服务的计算机软件,通常分为文件服务器、数据库服务器和应用程序服务器。运行以上软件的计算机或计算机系统也被称为服务器。服务器的构成与一般的PC比较相似,但是服务器在稳定性、安全性、性能等方面都要求更高,因为CPU、芯片组、内存、磁盘系统、网络等硬件和普通PC有所不同。

基本简介

服务器服务器是网络环境中的高性能计算机,它侦听网络上的其他计算机(客户机)提交的服务请求,并提供相应的服务,为此,服务器必须具有承担服务并且保障服务的能力。有时,这两种定义会引起混淆,如域名注册查询的Web服务器。

它的高性能主要体现在高速度的运算能力、长时间的可靠运行、强大的外部数据吞吐能力等方面。服务器的构成与微机基本相似,有处理器、硬盘、内存、系统总线等,它们是针对具体的网络应用特别制定的,因而服务器与微机在处理能力、稳定性、可靠性、安全性、可扩展性、可管理性等方面存在差异很大。一个管理资源并为用户提供服务的计算机软件,通常分为文件服务器(能使用户在其它计算机访问文件),数据库服务器和应用程序服务器。

服务器是网站的灵魂,是打开网站的必要载体,没有服务器的网站用户无法浏览。服务器就像一块敲门砖,就算网站在搜索引擎里的排名再好,网站打不开,用户无法浏览,网站就没有用户体验可言,网站能被打开是第一个重点。

定义

有时,这两种定义会引起混淆,如Web服务器。它可能是指用于网站的计算机,也可能是指像Apache这样的软件,运行在这样的计算机上以管理网页组件和回应网页浏览器的请求。

*** 作系统

服务器平台的 *** 作系统。Unix *** 作系统,由于是Unix的后代,大多都有较好的作服务器平台的功能。常见的类Unix服务器 *** 作系统有AIX、HP-UX、IRIX、Linux、FreeBSD、Solaris、Ubuntu、OS X Server、OpenBSD、NetBSD、和SCO OpenServer。微软也出版了Microsoft Windows服务器版本,像早期的Windows NT Server,现代的Windows 2000 Server和Windows Server 2003,正广泛使用的Windows Server 2008和刚刚于2012年9月4日发布的Windows Server 2012正式版。

服务器软件

服务器软件的定义如前面所述,服务器软件工作在客户端-服务器(C/S)或浏览器-服务器(B/S)的方式,有很多形式的服务器,常用的包括:

文件服务器(File Server) - 如Novell的NetWare

数据库服务器(Database Server) - 如Oracle数据库服务器,MySQL,PostgreSQL,Microsoft SQL Server等

邮件服务器(Mail Server) - Sendmail,Postfix,Qmail,Microsoft Exchange,Lotus Domino等

网页服务器(Web Server) - 如Apache,t>

FTP服务器(FTP Server) - Pureftpd,Proftpd,WU-ftpd,Serv-U等

域名服务器(DNS Server) - 如Bind9等

应用程序服务器(AP Server) - 如Bea公司的WebLogic,JBoss,Sun的GlassFish

代理服务器(Proxy Server) - 如Squid cache

电脑名称转换服务器 - 如微软的WINS服务器

使用目的

提高性能

有时候单个服务器无法满足使用需求,或者即使单个服务器能够达到这个要求,但是其成本太高。所以使用虚拟服务器来达到运用需求。

降低成本

多个虚拟服务器,可以通过软件架设在同一个实体服务器上,而每个虚拟服务器有可以提供服务器的所有功能,这样相对来说每个虚拟服务器的成本降低不少。

远程桌面使用的是3389端口,你可以尝试在远程桌面断掉的情况下: telnet_远程机器IP_3389(下划线代表空格),就能测试远端3389的端口开放情况。ping不同可能是防火墙设置,服务器的网站可以打开是远程服务器上80端口是开放的,但不表示3389端口是开放的。你这种情况我估计是3389端口冲突,是不是有什么程序冲突(可能是恶意程序)使用了这个端口。


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

原文地址: http://outofmemory.cn/zz/10749751.html

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

发表评论

登录后才能评论

评论列表(0条)

保存