安全必知 内存占用与杀毒软件卡机原因详解

物理内存是计算机的主存储设备,磁盘是副存储设备。也就是说,磁盘可以不要,但是内存不能没有。内存一部分是支持CPU运算的存储空间的扩展,直接与CPU通讯(相当于低速的cache),另一部分用来存储一些常用的数据(也就是一般而言的资源),这些资源对个人电脑而言都从磁盘读取(一些工作站可以通过其余I/O设备如光盘塔之类的输入),所以内存也与磁盘有相当多的通讯。当然这只是功能上的划分,本身这些数据并没有明确的界限。

内存一直在扮演一个中间人的角色,调和两个矛盾。一个是CPU高速运算需要的缓存不够。所以基本上最常用的数据,就放在速度快的cache上,不过由于CPU的体积和集成度的限制,集成不了足够的cache,所以用内存"滥竽充数",随着内存体积倍增,cache一级一级加大,如今这部分功能对性能的影响可能越来越不明显了。另一个矛盾是磁盘的随机数据读写效率低下,如今磁盘的连续数据传输能力越来越强大,不过由于物理结构的限制,随机数据读写一直是软肋。在这方面,如今市面上最好的磁盘甚至不如一个地摊上30元买来的普通U盘。这也就是为什么windows会支持用U盘、TF、CF卡来做readyboost加速补充内存而不是用磁盘。而内存无论是随机数据读写还是连续数据传输,速度都数十倍于磁盘,由于CPU运算可能需要大量的随机数据输入,不可能依赖速度蹩脚的磁盘,所以内存必不可少的在这里做一个代理人的角色。首先将磁盘上的数据提前输入内存,再由内存递交给cpu,由于cpu输出的数据只要输出到内存就可以呈现给用户,所以避免了磁盘性能低下造成的糟糕的用户体验。

废话说完,回到正题杀软上来。一般我们所指的杀软的用户体验,当然是在监控状态下的体验,估计也没人一天24小时扫描着磁盘吧。那么看看这时候杀软在如何利用硬件资源。首先,当我们读取或者写入文件的时候,杀软会提前一点预读取我们可能用到的文件,这个时候显然是把数据读入内存了。同时既然要监控,肯定要特征码吧,于是特征库也被加载进内存,这个时候内存占用基本上是飙升的状态。然后,CPU开机根据特征库比对文件,CPU占用也飙升。如果还开启了启发,那么还要加载虚拟机引擎到内存,CPU还要模拟出一个简单的系统运行过程,这时候只有一个结果–卡~(暂时命名为卡机1)尤其对于单核的CPU来说,瞬间的90%以上占用基本上是肯定的。不过由于用户不可能一次调用大量文件,所以这个过程很快结束,如果过程非常短暂,用户就不会觉得卡机。至于虚拟机引擎和特征库占用的那些内存是否马上回收,各个杀软的内存管理机制不同,结果也就不同了。如果常驻内存,那么显然应对连续的文件操作时候,不需要反复加载这两个模块,效率是很高的,如果立刻回收,则下个监控周期(以开始监控扫描到回复静息状态为一个周期)要重复加载,效率十分低下。

说了这么多是不是发现内存占用和卡机无关?也不是,关键点还没有出来。如果一个杀软占用内存居高不下,而系统可用的物理内存十分有限时,会出现一个不正常现象–空闲内存欠载。简单说就是内存满了,再也放不下数据了。此时windows不得不调用虚拟内存来模拟所有的内存分页,也就是用磁盘代替一部分内存的功能。当然CPU是不能直接读取磁盘上的分页文件的,所以工作过程应该是磁盘分页–>物理内存–>CPU–>物理内存–>磁盘分页,而内存充足时的工作流程是物理内存–>CPU–>物理内存。很明显磁盘分页到内存之间的数据读写是极大的瓶颈,尤其是随机读写能力极低的硬盘(如果采用了readyboost加速的闪存,磁盘分页的随机读写性能会上升,但是CPU占用会加大)。此时进行任何操作都会非常卡(命名为卡机2),而且CPU占用还不高(磁盘操作不依赖CPU,除非你还在用PIO模式,?)。不过大部分厂商肯定不会不考虑到这个,所以基本上会把一部分特征库驻留,另一部分回收掉,以此平衡内存占用和性能。

随着内存的总量逐渐加大,很多杀软都开始使用"智能"的动态内存分配,根据现有的内存状况,调整自己的内存占用。但是在小内存系统上这个技术效果不佳。首先由于内存不足,动态分配肯定是会及时回收特征库和虚拟引擎,也就是说每个监控周期都在重复加载这些数据,所以卡机1的时间会延长,不明显的卡机变成明显的卡机。

所以结论很明显

大内存机器的杀软卡机,基本上都是卡机1

小内存的卡机如果是动态分配很优秀的杀软,是卡机1,如果是占用内存的大户,基本上是卡机2

大内存机器显然很适合特征库巨大,启发一般般的杀软

小内存机器最好还是以启发为主,用CPU弥补内存的不足。如果两个都不行,?,你最好用回老版本杀软或者更新机器

PS:一般卡机1叫做卡U,卡机2就是我们常说的卡机

PS2:大小内存的界定,以今时今日的杀软为标准,应该在512MB