1
背景介绍
在日常对计算机系统的运维监测过程中,我们会密切关注各项系统资源的使用情况,以确保系统能够稳定、高效地运行。其中,操作系统内存的使用率是一个关键的监测指标,其使用情况时刻影响着整个系统的表现。
操作系统内存异常上涨会带来诸多不良影响。一方面,它会使系统性能大打折扣,运行速度明显变慢,多任务处理能力也会因内存资源紧张而受限,导致各任务间相互争抢内存,部分任务甚至无法正常推进;另一方面,还会威胁系统的稳定性,可能引发系统崩溃、死机等严重情况。
操作系统内存上涨的原因有很多,典型的原因包括:
应用程序或系统服务存在漏洞,出现内存泄漏问题,会导致操作系统内存上涨;
虚拟内存设置不合理,当物理内存不足时无法有效进行数据交换来缓解内存压力,让系统内存持续上涨;
电脑遭受病毒、恶意软件入侵,恶意程序有可能在后台偷偷占用大量内存资源,造成操作系统内存占用上涨。
本文介绍一次真实的现网主机操作系统内存泄漏问题的定位分析过程。
2
故障初步分析
故障现象
客户现场的某类主机都安装了威努特的主机卫士产品,其中一台主机(操作系统Windows 7)的内存占用明显高于现场其他同类型设备,而且在缓慢持续上涨。
初步分析
排查现场主机没有中病毒或恶意软件,初步分析内存上涨很有可能是内存泄漏引起的。
首先通过任务管理器查看系统运行进程占用内存,观察发现主机卫士相关的进程均处于正常范围,不存在内存异常现象,这时初步判断为其他进程引起的系统内存异常。
通过观察任务管理器的进程内存占用情况,发现svchost.exe进程的内存增长到将近300MB,这很明显是不正常的。正常系统的svchost进程内存为几兆到几十兆不等,但是肯定到达不了几百兆。下图为正常系统的svchost内存占用。
通过上述分析基本能够确定是svchost进程存在内存泄漏现象,那么我们下一步要做的就是具体确定svchost进程内存上涨的根本原因。
3
故障排查确认
01
分析内存异常
svchost.exe进程内存异常上涨,那么就需要分析异常的内存被用来做什么了,而想要分析内存存储内容,就需要用到WinDbg工具。
WinDbg是一个调试工具,用于分析Windows系统中的程序崩溃、调试代码和分析系统崩溃转储文件。Windbg在内存分析中发挥着至关重要的作用,它可以检测到内存泄漏以及定位内存泄漏的根源,还可以查看内存中存储的具体数据内容。
首先从任务管理器找到该进程,创建转储文件,生成DMP文件。然后使用WinDbg分析该DMP文件。
1、首先通过!address -summary来看一下当前应用内存占用量:
可以看到,堆内存占用有将近280MB。
2、使用!heap -s 命令查看进程堆内存的起始地址以及大小。
发现有一个堆内存大小有270MB大小,存在明显异常。
3、执行 !heap -stat -h命令查看上述异常堆内存的内存块以及数量、占用情况等详细统计信息。
发现size为18的内存块比例为99.98%,申请了大量重复的内存块未释放。
4、执行dt 命令查看异常内存中存储的数据。
发现其中存放的为一个相同的IP地址141.0.6.103。可初步判断出内存泄漏现象与该IP地址有关。
02
定位异常设备
既然已经判断内存泄漏的原因与141.0.6.103 这个IP地址有关,那么后续要做的就是排查操作系统与该IP相关的行为。在这个过程中,我们能够借助 Procmon工具,同时充分利用操作系统的事件日志,以此来精准确定与之相关的具体行为。
Procmon是由微软开发的一款高级监控工具,它整合了FileMon和RegMon 的功能,并进行了全面的优化与扩展。通过实时监控文件系统、注册表和进程/线程活动,Procmon能够捕捉到系统中发生的几乎所有操作,为技术人员呈现出一幅详尽的系统运行画卷。无论是追踪程序的异常行为、排查系统性能瓶颈,还是检测恶意软件的踪迹,Procmon都能发挥出其独特的价值。
Procmon具有过滤功能,可以指定不同的信息来过滤操作系统所有进程的行为,查找到我们需要的信息。如下图所示。
通过Procmon与操作系统日志的跟踪分析,我们成功找到了与141.0.6.103相关的信息,原来是spoolsv.exe进程与该IP存在通信,如下图所示。
经过查询,我们发现spoolsv.exe是Windows操作系统中一个非常重要的进程,它在系统中起着关键的打印任务管理作用,管理所有本地和网络打印队列及控制所有打印工作。
既然该进程与打印任务有关,同时上文的操作系统内存上涨问题可能与该进程有关,那么141.0.6.103可能就是一台打印机设备。
我们通过查询操作系统的组件信息,发现确实存在一台ip为141.0.6.103的打印机设备。如下图所示。
但是经与客户确认,该打印机已经不再使用,是一台无效打印机设备。所以,推测问题原因就是spoolsv.exe进程在尝试与打印机设备通信,但是没有得到141.0.6.103的响应,业务流程无法正常执行,异常导致出现了内存泄漏。
03
确定异常原因
为了验证是否是该问题导致的内存泄漏,我们将该打印机删除。删除之后再使用Procmon监控,发现没有与该IP相关的信息了,同时系统内存也不再上涨。
这也就证实了我们之前对于问题原因的判断是正确的,并且所采取的解决措施是有效的,这应该是Windows系统打印服务的一个Bug。
4
总 结
在日常系统运维中,要时刻留意内存使用率等关键指标,一旦发现系统内存存在异常,应该及时排查原因,避免影响系统运转以及整体性能。
当面对类似进程内存异常的复杂问题时,我们要善于使用各种专业工具,让它们成为我们解决问题的得力助手。在本次排查过程中,任务管理器帮助我们快速定位问题进程,WinDbg工具帮助我们分析进程内存之中存在的问题,Procmon工具和操作系统的事件日志帮助我们追踪相关行为、锁定问题根源。
推荐站内搜索:最好用的开发软件、免费开源系统、渗透测试工具云盘下载、最新渗透测试资料、最新黑客工具下载……
还没有评论,来说两句吧...