省流
排查硬件驱动,包括主板自带驱动、显卡驱动、外设驱动,依次停止对应进程/服务,检查“已提交内存”是否降低。
前言
某一天,我用浏览器查资料,打开新窗口的时候,系统突然就弹出了一个弹窗,提示系统内存不足,需要释放内存才可继续……
某一天,我游戏玩得好好的,突然,就弹出内存不足,需要释放内存后,接着,没给我释放内存的机会,游戏就给我强制停止了……
实际上,物理内存并没有耗尽,但已提交的内存却几乎满了。
我查了很多资料,都没有查到如何能准确释放这个“已提交”内存的方法,基本都要重启才能情况额外的已提交内存。
初步尝试
首先,要搞清楚几个问题:
一,为什么已提交内存高到一定程度后,就会影响现有程序运行;
二,为什么明明物理内存还剩了很多,电脑却随着运行时间增加,已提交内存却一直涨,完全停不下来;
三,为什么几乎关闭了所有正在运行的程序,这个已提交内存还是没有降低;
要搞清楚这个三个问题,我们先了解下“已提交内存”到底是什么意思。
查询“已提交内存”的定义:
在Windows任务管理器中,“已提交内存”(也称为“Commit Size”或“提交大小”)是指系统为进程分配的虚拟内存总量。这里的虚拟内存包括物理内存(RAM)和硬盘上的分页文件(pagefile.sys)中为所有运行中的进程预留的部分。
当一个程序运行时,操作系统会为其分配一定的内存空间来存储程序的数据和指令。这个分配的空间就是“已提交内存”的一部分。它并不一定表示实际使用的内存大小,而是指为了程序的需要而预留的内存。
如果“已提交内存”的总量超过了物理内存加上分页文件的大小,那么系统可能会出现内存不足的情况,这通常会导致系统性能下降。
简而言之,“已提交内存”是一个指标,用来显示系统为所有进程预留的虚拟内存总量。这个数值可以帮助用户了解系统的内存使用情况,以及是否有足够的资源支持当前运行的所有应用程序。 from-通义
也就是说,只要有程序在申请“虚拟内存”,且没有释放,那“已提交内存”就会一直升高,只要“已提交内存”达到上限,就无法再申请“虚拟内存”了,但“虚拟内存”和“物理内存”不太一样,后者只要占用了就能很容易查到是哪个程序占用,但前者,如果只是申请了,但未使用,是很难查到到底是哪个程序去申请的,想要释放,就更难了。
进一步探索
要看到提交内存,我首先想到的方案是,通过任务管理器的“资源监视器”,能够看到“已提交内存”。
但随之而来的问题是,这里的提交内存,就算全部加起来,也远低于“已提交内存”,不过,通过这里的排查,倒是发现了win11的“Windows资源管理器”偶尔会有内存泄漏的问题,导致内存暴涨,轻松突破几个G,所以,在任务管理器中重启资源管理器也能某种程度解决内存爆满的情况。
然后,我找到了VMMap软件,这个软件可以查看软件的虚拟内存占用情况,理论上来说,挨个进程排查,是能排查出到底是哪个进程虚拟内存占用异常。几百个进程,排查了两个小时,但始终没有找到虚拟内存占用很高的程序。
接下来,我查了不少资料,最明确的一个解决了问题的方案,是说惠普打印机驱动会内存泄漏,卸载掉或者停掉对应服务就行,但我电脑并没有安装任何打印机驱动,从这方面没法入手。
找到方向
在持续了很多次已提交内存涨到上限,然后重启电脑的经历后,我实在受不了了,决定一定要解决这个问题。
既然知道肯定是某个程序的异常内存申请,但VMMap又没查到,那就采用排除法,尝试把程序一个一个都停掉,观察已提交内存的变化。
当然,排除法还是要有几个基本逻辑的,比如win系统进程、常用更新频繁软件,是不会出现大量内存泄漏情况的,这样一来,需要处理的进程就少很多了,只有几十个。
终于,在停止了二三十个进程后,已提交内存跌回了正常范围。
找到的这个进程名为“LigthlingService”,这是个什么进程呢?经过查询,知道了这是“华硕灯光同步服务”(“LightingService ASUS AURA SYNC lighting service”),一个华硕主板自带的灯光同步服务。
结合前面有人通过停止打印机进程解决了已提交内存过高的情况,大概理解了,这应该是硬件驱动服务的问题,电脑驱动与外设之间的数据交换不正常,然后驱动就一直申请内存。
解决方案?
找到问题后,解决方案自然很简单,停止并禁用对应的服务。不过,这只是治标不治本,停用了对应的驱动服务后,相应的外设就无法正常使用了~😂
目前看来,想要解决这个问题,貌似只有厂家那边更新驱动才行……当然,或许对应驱动版本已经更新了,只是自己没更新而已,去官网下载最新版,或许也能解决。