Windows服务器高物理内存占用问题排察【伴随黑客攻击】

我经常在手中拿着一个内存条手链,以彰显我是计算机深入挖掘专家,它就是一个象征,类似摸金符,有它代表你有资格可以探墓了。

同事找到我说:“我们有一台服务器,内存资源持续高位运行,经常浮动在80%左右,系统重启后会好一些,不过持续不了太久。”

服务器是云服务器:8G内存,发生问题时,大约5GB内存消失了,但合计所有进程的内存工作集也不到3G,消失的内存何在?

好吧,进入远程登录看看实际情况吧

在任务管理器与Process Explorer中将所有进程工作集排序并汇总后,得到的结果就是我们没有任何程序使用这么大的内存

20230401014655619

不及格的程序员-八神

20230401014655736

不及格的程序员-八神

发生这种奇怪诡异的事情在Windows已经见怪不怪了,因为【任务管理器】不是理想的内存探察器,有些系统内存资源它是感知不到的,你不能指望它来计算系统正在使用的内存,除非你想掉入无止尽的黑洞时间,到头来一场空,浪沸大量人生。

有经验的Windows运维专家到这里就会知道,如果上面没有你想要的结果,那么这背后可能有不可告人的秘密在发生,来自下面几个原因之一:

  • 1 Sql Server 内存缓冲池,SqlServer如果客户请求量巨大,它会吞掉你所有可用物理内存,直到系统到崩溃的边缘。
  • 2 Hyper-V虚似机 Dynamic Memory 占用内存
  • 3 某些系统驱动程序内存泄漏(如:某个版本的Ati catalyst control center,或是某个品牌的网卡驱动程序,网络连接多了后内存狂飙)
  • 4 第三方大型服务器程序:Logitech Media Server(不需要启动主程序,可能是后台服务或是驱动有漏洞)

我们使用正确的工具软件是探察这些问题的先决条件,要有好的罗盘,口决,驴踢子

到微软网站下载RAMMap, VMMap ,借用这两个软件我发现Sql Server偷偷占用大量的内存,下图只是例子:如果你看到了满屏黄色条状private Data,恭喜。

20230401014655120

进入数据库的内存设定页面,将最大内存调整到较小的数值,系统内存的压力立杆见影,马上就下降了,由此断定此问题正是SQLServer触发的。

20230401014655187

如何设置这个最大服务器内存是个技术活,因为系统上还有许多程序需要大量内存,除非你这台服务器就SqlServer独占资源,你可以将90%的内存给它用。

需要注意:

  设置最大服务器内存,不代表SqlServer申请内存资源不会超过这个数值,它只是缓存数据池的内存大小,SqlServer还有许多占用内存的组件是不包含在内的
有时你会怀疑我明明设置了最大服务器内存,为什么在资源管理下看到SQLServer申请的内存已经超过此值,你没看错,SqlServer是内存大户,内存池只是它需要用的一部分,多数数据库都有一个成名秘技就是减少磁盘IO,代价就是更多的内存。

经过上面分析,告之同事要么升级内存购买更多,要么忍着,并将最大服务内存适当调低些。

找几个倒霉的客户程序,在代码里多加几个Sleep,当它们觉得慢的受不了时,你告之需要升级系统数据库了,原因你们的数据大到服务器快装不下了。。。

补充内容:

问题来自另一台服务器, 是某客户独占的,只有一个IIS站点,一个SqlServer实例,该客户每日上传的数据百万左右,数据库时常报错如下:

资源池‘ default’ 没有足够的系统内存来运行此查询

运维同事之后将数据库的最大服务器内存调整到一个小的值,SqlServer默认会消耗到它所能找到的所有系统内存,所以每台装有SQLServer的服务器在安装后会应设定一个合适的数值,来配合系统的运行。但是在设置之后却不知道这些内存占用并不在【任务管理器】中显示,所以引来了它的疑惑,并找到了我。

好吧,我承认,这不是第一次找我了,就在前些日子这个服务器的数据库经常崩溃,经常出现如下错误

20230401014655369

20230401014657102

 

这种错误大家也许经常会在网络上看到,引起这个故障的原因可能是多样的,在我这里也不例外,2个星期内我们一直围绕在数据文件格式问题打转,可问题一直在持续,客户经常打电话到客服那报怨,花了的钱并不值当,称我们服务质量简直垃圾一样,天天烦到它们了。
直到我冥思苦想后终于找到罪魁祸首,直指Windows Remote DeskTop漏洞。

终其原因是系统受到多次攻击,导致系统BOSD死亡蓝屏,由于是云服务器,系统自动重启,SQLSever数据库不能正常启动。

为什么会有这样的攻击呢,因为黑客通过此手段可以得到计算机的控制权,达到做任何事情,无利不起早。你们(黑客们)都给我低调点儿

上面的错误提示让我受到启发:Sqlserver的日志和系统日志中的其它信息可能提供了更详细信息。。。。

系统日志中提到 重启证据,当时开始怀疑机房最近供电有些不足,哈哈,怎么人不都是这样的吗?

20230401014657878

后来又看到这个报错,也许能洗清我对机房电力系统的污蔑

20230401014657928

 

系统蓝屏后给出Windows系统内核转储文件,真是太棒了,拿到转储用WinDBG简单看一下就知道是受到BlueKeep攻击了,下面是Dump的 栈回溯

不及格的程序员-八神

20230401014659285

 

红框之处正是远程桌面的驱动程序调用所在最后死在了蓝屏里,升级最新Windows系统补丁,故障消失,至此故事完结!

然而工作并未结束,这里仅仅说明了一种服务器内存被占用的情况说明,上面我还列举了其它情况并没有说明,不是什么情况都能马上遇到

但是我已经在你的心中种下了一颗种子,当你遇到狂风暴雨时耳边可能会响起 他说风雨中这点痛算什么…

问题终究会被发现的,否则就是你的方法不对,记住方法与工具同样重要,再见!

© 版权声明
THE END
点赞7赞赏 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容