十行代码-80%-让日志存储老本降落 (十行代码九个警告八个错误)
日志是系统中熵增最快的一个模块,它承载了业务横蛮成长环节中的一切副产品。本文引见了一个日志控制案例,围绕降本和提效两大主题,取得肯定功效,分享给一切盼望造物乐趣的同窗。
前言
履约控制是一个面向物流商家的OMS上班台,自从初代目把架子搭起来之后,就没有继续投入了,起初不时是协作同伴同窗在担任日常保养和需求撑持。经过几年的横蛮成长,系统曾经杂草丛生,乱象百出。再起初,甚至一度成为一块无主之地,走行业共建的方式来允许。关于一个不允许行业隔离的系统,行业共建象征这个系统将极速蜕化。
两年前我开局接收履约控制,到来这片宽广的蛮荒之地,正如一切那些盼望造物乐趣并且手里刚好有锤子镰刀的人,我就像一匹脱缰的野马,脑子里经常会发生很多大胆且新奇的想法,宿愿借此把履约控制打形成一个完美的系统。只惋惜真正能够付诸通常的少之又少,本篇就是为数不多得以落地,并且有相当适用价值idea中的一个,整顿进去分享给有须要的同窗做参考。
一、日志乱象
日志是日常开发中最有或许被漠视,最容易被滥用的一个模块。被漠视是由于打日志真实是一个再繁难不过的事,先人设计好了一个logback.xml,前面只要要如法炮制定义一个logger,棘手一个info调用就搞定,他甚至不确定这条日志能不能打进去,也不知道会打在哪个文件,反正先跑一次性试试,不行就换error。
被滥用是由于不同场景日志的格局内容千差万别,或许说日志打法太灵敏,太随便了,格调太多样化了,以致于简直每团体一言不合就要自己写一个LogUtil,我见过最夸张的,一个系统中用于打日志的工具类,有二三十个之多,先人纠结该用哪个工具或许就要做半个小时的思想奋斗,完美诠释了什么叫破窗效应。
最好的学习方式就是经过反面教材吸取经验,上方咱们罗列一些最经常出现的日志设计开发环节中的疑问。
1.分类之乱
普通来说,一个系统肯定须要设计多个日志文件以辨别不同业务或场景,无法能一切的日志都打到一个文件里。但是怎样启动分类,没人通知咱们,于是就有了各种各样的分类。
按系统模块分。 这种分类应该是最基础的一种分类,也是最有档次感的分类。比如履约服务中枢的系统分层。基本上每一层对应一个日志文件。
按租户身份分。 普通中台系统都会允许多个租户(行业),每一个租户独自对应一个日志文件。这种分类普通不会独自经常使用,除非你要做齐全意义上的租户隔离。
看法流分类法。 不合乎MECE规律,没有明晰一致的分类逻辑,按业务分,按系统模块分,按接口才干分,按新老链路分,各种分法的影子都能看到,结果就是分进去几十个文件,打日志的人基本就不知道这一行的日志会打进哪个文件。
凡此种种,不一而足。发现没有,总有那么一瞬间能让人发生新增日志文件的神经激动,他们的诉求和场景也无法谓不正当,虽然这些日志的维度齐全不关系,但是没有什么能阻止这种激动。最开局的那一套日志设计,就像一个濒临死亡的大象,不时地被不同的利益方从身上扯下一块分去。
2.格局之乱
关于日志须要有肯定的格局这点置信没有人会有异议,格局的乱象关键体如今两个方面:
第一个是格局的设计上,有些系统设计了十分复杂的格局,用多种分隔符组合,允许日志内容的分组,用关键词定位的方式替代固定位置的格局,同时允许格局裁减,这对人脑和计算机去解析都是一种累赘。
第二个是同一个日志文件,还能发生不同格局的内容,堆栈和反常业务日志混同。
来看一个例子,我不给任何揭示,你能在大脑里很快剖析出这个日志的结构吗?
requestParam$&trace@2150435916867358634668899ebccf&scene@test&logTime@2023-06-1417:44:23&+skuPromiseInfo$&itemId@1234567:1&skuId@8888:1&buyerId@777:1&itemTags@,123:1,2049:1,249:1,&sellerId@6294:1&toCode@371621:1&toTownCode@371621003:1&skuBizCode@TMALL_TAOBAO:1&skuSubBizCode@TMALL_DEFAULT:1&fromCode@DZ_001:1+orderCommonInfo$&orderId@4a04c79734652f6bd7a8876379399777&orderBizCode@TMALL_TAOBAO&orderSubBizCode@TMALL_DEFAULT&toCode@371621&toTownCode@371621003&+
3.工具之乱
有时刻甚至会发生,同一个类,同一个方法中,两行不同的日志埋点,打进去的日志格局不一样,落的日志文件也不一样。为什么会发生这种状况?就是由于用了不同的日志工具。要究其根源,咱们须要剖析一下不同的工具终究是在做什么。
可以发现,很多工具之间的差异就是允许的参数类型不一样,有些是打印订单对象的,有些是打印信息的,有些是打印调度日志的。还有一些差异是面向不同业务场景的,比如一盘货公用工具,负卖公用工具。
还有一些差异是面向不同的意外封装的,有些是打印ExceptionA,有些是打印ExceptionB的。世间新奇事,莫过于此,或许只能用存在即正当去解释了。
二、日志分层
我不时信仰极简的设计准则,繁难象征着牢无法破。上方提到,一套日志系统最终的终局肯定是走向凌乱,既然这种趋向无法防止,那么咱们在最后设计的时刻就只能确保一件事,保障原始的分类尽量繁难,且不堆叠。
其实通用的分类方式无非就两种,一种按职能水平拆分,一种按业务垂直拆分。普通来说,一级分类,应该驳回水平拆分。由于业务的边界普通是很难划清的,边界相对含糊,职能的边界就相对明晰稳固很多,职能其实反映的是上班流,上班流一经构成,基本不会发生太大的结构性变动。基于这种思绪,我设计了如下的日志分层。
从档次过去看,其实只要三层,入口,内核,进口。入口日志只担任打印流量入口的出入参,比如HSF,controller。进口日志担任打印一切第三方服务调用的出入参。内核日志,担任打印一切两边口头环节中的业务日志。就三层足矣,足够繁难,不重不漏。
另外把堆栈日志独自拎进去,堆栈相比业务日志有很大的不凡性,本文题目所指出的日志存储降落优化,也只是针对堆栈日志做的优化,这个前面再讲。
三、格局设计
日志的格局设计也有一些考究。首先日志的设计是面向人可读的,这个无需多言。另外也十分关键的一个点,要面向可监控的设计,这是容易被很多人漠视的一个点。基于这两个准则,说一下我在格局设计上的一些思绪。
首先要做维度形象。既然是面向监控,监控普通须要允许多个保养,比如行业维度,服务维度,商家维度等等,那么咱们就须要把一切的维度因子抽进去。那么这些维度实践打印的时刻怎样传给logger呢?倡导是把他们存到ThreadLocal中,打的时刻从高低文中取。这样做还有一个好处是,日志打印工具设计的时刻就会很优雅,只要要传很少的参数。
格局尽量繁难,驳回商定大于性能的准则,每一个维度占据一个固定的位置,用逗号宰割。切忌设计一个大而全的模型,而后间接整个的序列化为一个JSON字符串。
也不要被所谓的裁减性给诱惑,给经常使用方随便开出一个能够自定义格局的口子,即使你能轻而易举的提供这种才干。依据我的阅历,这种裁减性肯定会被滥用,到最后连设计者也不知道实践的格局终究是怎样的。当然这个须要设计者有较高的视线和远见,不过这不是难点,难的还是抑制自己炫技的愿望。
在内容上,尽量打印可以自解释的文本,做到见名知义。举个例子,咱们要打印退款标,退款标原本是用1,2,4,8这种二进制位存储的,打印的时刻不要间接打印存储值,翻译成一个能形容它含意的英文code。
格局示例:
timeStamp|threadNamelogLevelloggerName|sourceName,flowId,traceId,sceneCode,identityCode,loginUserId,scpCode,rpcId,isYace,ip||businessCode,isSuccess||parameters||returnResult||
内容示例:
2023-08-1414:37:12.919|http-nio-7001-exec-10INFOc.a.u.m.s.a.LogAspect|default,c04e4b7ccc2a421995308b3b33503dda,0bb6d59616183822328322237e84cc,queryOrderStatus,XIAODIAN,5000000000014,123456,0.1.1.8,null,255.255.255.255||queryOrderStatus,success||{"@type":"com.alibaba.common.model.queryorder.req.QueryOrderListReq","currentUserDTO":{"bizGroup":888,"shopIdList":[123456],"supplierIdList":[1234,100000000001,100000000002,100000000004]},"extendFields":{"@type":".util.HashMap"},"invokeInfoDTO":{"appName":"uop-portal","operatorId":"1110","operatorName":"account_ANXRKY8NfqFjXvQ"},"orderQueryDTO":{"extendFields":{"@type":"java.util.HashMap"},"logisTypeList":[0,1],"pageSize":20,"pageStart":1},"routeRuleParam":{"@type":"java.util.HashMap","bizGroup":199000},"rule":{"$ref":"$.routeRuleParam"}}||{"@type":"com.alibaba.common.model.ResultDTO","idempotent":false,"needRetry":false,"result":{"@type":"com.alibaba.common.model.queryorderstatus.QueryOrderStatusResp","extendFields":{"@type":"java.util.HashMap"}},"success":true}||
四、堆栈倒打
本文的重点来啦,这个设计就是扫尾提到的奇思妙想。堆栈倒打源于我在排查另一个系统疑问环节中感遭到的几个痛点,首先来看一个堆栈示例。
这么长的堆栈,这密密层层的字母,即使是天天跟它打交道的开发,置信第一眼看上去也会头皮发麻。回顾一下咱们看堆栈,真正想获取的是什么信息。
所以我感遭到的痛点外围有两个。
第一个是,SLS上搜进去的日志,自动是折叠的。 关于堆栈,咱们应该都知道,传统意外堆栈的特色是,最顶层的意外,是最凑近流量入口的意外,这种意外咱们普通状况下不太关心。最底层的意外,才是惹起系列失误的源头,咱们日常排查疑问的时刻,往往最关心的是失误源头。所以关于堆栈日志,咱们无法经过摘要一眼看出疑问出在哪行代码,肯定点开,拉到最上方,看最后一个堆栈才干确定源头。
我写了一个失误示例来说明这个疑问。惯例的堆栈结构其实分两局部,我称之为,意外要素栈,和失误堆栈。
如上,一个堆栈蕴含有三组意外,每一个RuntimeException是一个意外,这三个意外连起来,咱们称为一个 意外要素栈 。
每一个RuntimeException外部的堆栈,咱们称为 失误堆栈 。
说明一下,这两个名词是我杜撰的,没有看到有人对二者做辨别,咱们普通都统称为堆栈。读者能了解我想表白的就行,不用太纠结名词。
第二个痛点是,这种堆栈存储老本太高,有效信息承载率很低。 诚恳说这一点或许大少数一线开发并没有太剧烈的体感,但在这个降本增效的大环境下,咱们每团体应该把这点作为自己的OKR去践行,变主动为主动,否则在机器老本和人力老本之间,公司只好做选用题了。
如今指标很明白了,那咱们就开局隔靴搔痒。外围理路有两个。
针对堆栈折叠的疑问,驳回堆栈倒打。 倒打之后,最底层的意外放在了最上方,甚至不用点开,瞟一眼就能知道要素。
同时咱们也允许意外要素栈层数性能化,以及失误堆栈的层数性能化。解这个疑问,实质上就是这样一个繁难的算法题:倒序打印堆栈的最后N个元素。外围代码如下。
*递归逆向打印堆栈及cause(即从最底层的意外开局往上打)
*@paramt原始意外
*@paramcauseDepth须要递归打印的cause的最大深度
*@paramcounter以后打印的cause的深度计数器(这里肯定用援用类型,假设用基本数据类型,你对计数器的修正只能对以后栈帧可见,但是这个计数器,又肯定在一切栈帧中可见,所以只能用援用类型)
*@paramstackDepth每一个意外栈的打印深度
*@paramsb字符串结构器
publicstaticvoidrecursiveReversePrintStackCause(Throwablet,intcauseDepth,ForwardCountercounter,intstackDepth,StringBuildersb){
if(t==null){
if(t.getCause()!=null){
recursiveReversePrintStackCause(t.getCause(),causeDepth,counter,stackDepth,sb);
if(counter.i++<causeDepth){
doPrintStack(t,stackDepth,sb);
要降落存储老本,同时也要确保信息不失真,咱们思考对堆栈行下手,把全限定类名简化为类名全打,包门路只打第一个字母,行号保管。如:c.a.u.m.s.LogAspect#log:88。外围代码如下。
publicstaticvoiddoPrintStack(Throwablet,intstackDepth,StringBuildersb){
StackTraceElement[]stackTraceElements=t.getStackTrace();
if(sb.lastIndexOf("t")>-1){
sb.deleteCharAt(sb.length()-1);
sb.append("Caused:");
sb.append(t.getClass().getName()).append(":").append(t.getMessage()).append("nt");
for(inti=0;i<stackDepth;++i){
if(i>=stackTraceElements.length){
StackTraceElementelement=stackTraceElements[i];
sb.append(reduceClassName(element.getClassName()))
.append("#")
.append(element.getMethodName())
.append(":")
.append(element.getLineNumber())
.append("nt");
最终的成果大略长这样。咱们随机挑了一个堆栈做对比,统计字符数量,在等同信息量的状况下,紧缩比到达88%。
五、思想拓展
很多文章青睐宣扬所谓的最佳通常,在笔者看来最佳通常是个伪命题。当你在谈最佳通常的时刻,你须要指明这个"最"是跟谁比进去的,你的适用范围是哪些,我置信没有任何一团体敢大言不惭自己的框架或打算是放之四海而皆准的。
本文所提出的日志设计通常打算,是在一个典型的中台运行中落地的,三段的日志分层打算虽然足够繁难,足够通用。
但是最近接触了一些富客户端运行,这个打算要想迁徙,或许就得做一些外乡化的革新了。他们的特点是依赖的三方服务少,少量的驳回缓存设计,这种设计的底层逻辑是,尽量使得一切逻辑能在本地客户端口头以降落散布式带来的危险和老本,这象征着,或许99%的日志都是外部口头逻辑打的,那咱们就得思考从另一些维度去做拆分。
另外关于日志降本,本文讨论的也只是降堆栈的存储,一个系统无法能一切日志都是堆栈,所以实践全体的日志存储老本,或许降幅不会有这么多。
谈这么多,归根结底还是一句话,不要迷信银弹、减肥药一类的物品,一切的技术也好,思想也好,都要就地取材、量入为出。
作者丨伏难
高手请进
虚拟内存就是硬盘里的因为内存有容量限制,所以不可能什么都存在内存里,所以才有了虚拟内存。 我把虚拟内存的资料给你你自己看吧缓存分很多种的,比如CPU的缓存,硬盘的缓存资料我也发下面了,自己看吧什么是虚拟内存虚拟内存是用硬盘空间做内存来弥补计算机RAM空间的缺乏。 当实际RAM满时(实际上,在RAM满之前),虚拟内存就在硬盘上创建了。 当物理内存用完后,虚拟内存管理器选择最近没有用过的,低优先级的内存部分写到交换文件上。 这个过程对应用是隐藏的,应用把虚拟内存和实际内存看作是一样的。 技术细节:对于英特尔 IA-32 处理器(包括 386、奔腾等)而言,用户应用程序(进程)访问内存时其内存地址是虚拟的,CPU 会将它转换为实际的物理内存地址。 物理内存不够时,操作系统系统会将各个进程中一部分暂时不用的内存换出到页面文件(交换文件)中,并将需要访问内存的程序的内容从页面文件中换入到物理内存。 虚拟内存的作用不知大家有没有发现,在Windows2000(XP)目录下有一个名为的系统文件(Windows98下为 ),它的大小经常自己发生变动,小的时候可能只有几十兆,大的时候则有数百兆,这种毫无规律的变化实在让很多人摸不着头脑。 其实, 是Windows下的一个虚拟内存,它的作用与物理内存基本相似,但它是作为物理内存的“后备力量”而存在的,也就是说,只有在物理内存已经不够使用的时候,它才会发挥作用。 虚拟内存的产生我们都知道,虽然在运行速度上硬盘不如内存,但在容量上内存是无法与硬盘相提并论的。 当运行一个程序需要大量数据、占用大量内存时,内存就会被“塞满”,并将那些暂时不用的数据放到硬盘中,而这些数据所占的空间就是虚拟内存。 现在我们也明白为什么的大小会经常变化了。 内存在计算机中的作用很大,电脑中所有运行的程序都需要经过内存来执行,如果执行的程序分配的内存的总量走过了内存大小,就会导致内存消耗殆尽。 为了解决这个问题,Windows中运用了虚拟内存技术,即拿出一部分硬盘空间来充当内存使用,当内存占用完时,电脑就会自动调用硬盘来充当内存,以缓解内存的紧张。 举个例子来说,压缩程序在压缩时有时候需要读取文件的很大一部分并保存在内存中作反复的搜索。 假设内存大小是128MB,而要压缩的文件有 200MB,且压缩软件需要保存在内存中的大小也是 200MB,那么这时操作系统就要权衡压缩程序和系统中的其他程序,把多出来的那一部分数据放进交换文件。 下面,就让我们一起来看看如何对虚拟内存进行设置吧。 虚拟内存的设置对于虚拟内存主要设置两点,即内存大小和存放位置,内存大小就是设置虚拟内存最小为多少和最大为多少;而存放位置则是设置虚拟内存应使用哪个分区中的硬盘空间。 对于内存大小的设置,如何得到最小值和最大值呢?你可以通过下面的方法获得:选择“开始→程序→附件→系统工具→系统监视器”(如果系统工具中没有,可以通过“添加/删除程序”中的Windows安装程序进行安装)打开系统监视器,然后选择“编辑→添加项目”,在“类型”项中选择“内存管理程序”,在右侧的列表选择“交换文件大小”。 这样随着你的操作,会显示出交换文件值的波动情况,你可以把经常要使用到的程序打开,然后对它们进行使用,这时查看一下系统监视器中的表现值,由于用户每次使用电脑时的情况都不尽相同,因此,最好能够通过较长时间对交换文件进行监视来找出最符合您的交换文件的数值,这样才能保证系统性能稳定以及保持在最佳的状态。 一般来说,交换文件太大不会影响效率,但会占用额外的磁盘空间。 交换文件太小有时会引起可以运行的程序数量变少。 找出最合适的范围值后,在设置虚拟内存时,用鼠标右键点击“我的电脑”,选择“属性”,弹出系统属性窗口,选择“性能”标签,点击下面“虚拟内存”按钮,弹出虚拟内存设置窗口,点击“用户自己指定虚拟内存设置”单选按钮,“硬盘”选较大剩余空间的分区,然后在“最小值”和“最大值”文本框中输入合适的范围值。 如果您感觉使用系统监视器来获得最大和最小值有些麻烦的话,这里完全可以选择“让Windows管理虚拟内存设置”。 调整分页位置Windows9x的虚拟内存分页位置,其实就是保存在C盘根目录下的一个虚拟内存文件(也称为交换文件),它的存放位置可以是任何一个分区,如果系统盘C容量有限,我们可以把调到别的分区中,方法是在记事本中打开(C:Windows 下)文件,在[386Enh]小节中,将“PagingDrive=”,改为其他分区的路径,如将交换文件放在 D:中,则改为“PagingDrive=”,如没有上述语句可以直接键入即可。 而对于使用Windows2000和WindowsXP的,可以选择“控制面板→系统→高级→性能”中的“设置→高级→更改”,打开虚拟内存设置窗口,在驱动器[卷标]中默认选择的是系统所在的分区,如果想更改到其他分区中,首先要把原先的分区设置为无分页文件,然后再选择其他分区。 或者,WinXP一般要求物理内存在256M以上。 如果你喜欢玩大型3D游戏,而内存(包括显存)又不够大,系统会经常提示说虚拟内存不够,系统会自动调整(虚拟内存设置为系统管理)。 如果你的硬盘空间够大,你也可以自己设置虚拟内存,具体步骤如下:右键单击“我的电脑”→属性→高级→性能设置→高级→虚拟内存更改→选择虚拟内存(页面文件)存放的分区→自定义大小→确定最大值和最小值→设置。 一般来说,虚拟内存为物理内存的1.5倍,稍大一点也可以,如果你不想虚拟内存频繁改动,可以将最大值和最小值设置为一样。 {另一种说法:调整时我们需要注意,不要将最大、最小页面文件设为等值。 因为通常内存不会真正“塞满”,它会在内存储量到达一定程度时,自动将一部分暂时不用的数据放到硬盘中。 最小页面文件越大,所占比例就低,执行的速度也就越慢。 最大页面文件是极限值,有时打开很多程序,内存和最小页面文件都已“塞满”,就会自动溢出到最大页面文件。 所以将两者设为等值是不合理的。 一般情况下,最小页面文件设得小些,这样能在内存中尽可能存储更多数据,效率就越高。 最大页面文件设得大些,以免出现“满员”的情况。 PS:①1.5倍虚拟内存设置,是网上技术文档通用说明的,个人认为可以根据常用软件的实际情况设定。 推荐有经验的用户使用。 ②现在有很多工具软件(例如WINDOWS优化大师、超级兔子),可以很好的更改这些设置,工具软件也会根据你的电脑的实际情况进行相应的推荐设置。 虚拟内存使用技巧对于虚拟内存如何设置的问题,微软已经给我们提供了官方的解决办法,对于一般情况下,我们推荐采用如下的设置方法:(1)在Windows系统所在分区设置页面文件,文件的大小由你对系统的设置决定。 具体设置方法如下:打开我的电脑的属性设置窗口,切换到 高级选项卡,在启动和故障恢复窗口的写入调试信息栏,如果你采用的是无,则将页面文件大小设置为2MB左右,如果采用核心内存存储和 完全内存存储,则将页面文件值设置得大一些,跟物理内存差不多就可以了。 小提示:对于系统分区是否设置页面文件,这里有一个矛盾:如果设置,则系统有可能会频繁读取这部分页面文件,从而加大系统盘所在磁道的负荷,但如果不设置,当系统出现蓝屏死机(特别是STOP错误)的时候,无法创建转储文件(),从而无法进行程序调试和错误报告了。 所以折中的办法是在系统盘设置较小的页面文件,只要够用就行了。 (2)单独建立一个空白分区,在该分区设置虚拟内存,其最小值设置为物理内存的1.5倍,最大值设置为物理内存的3倍,该分区专门用来存储页面文件,不要再存放其它任何文件。 之所以单独划分一个分区用来设置虚拟内存,主要是基于两点考虑:其一,由于该分区上没有其它文件,这样分区不会产生磁盘碎片,这样能保证页面文件的数据读写不受磁盘碎片的干扰;其二,按照Windows对内存的管理技术,Windows会优先使用不经常访问的分区上的页面文件,这样也减少了读取系统盘里的页面文件的机会,减轻了系统盘的压力。 (3)其它硬盘分区不设置任何页面文件。 当然,如果你有多个硬盘,则可以为每个硬盘都创建一个页面文件。 当信息分布在多个页面文件上时,硬盘控制器可以同时在多个硬盘上执行读取和写入操作。 这样系统性能将得到提高。 虚拟内存设置注意事项允许设置的虚拟内存最小值为2MB,最大值不能超过当前硬盘的剩余空间值,同时也不能超过32位操作系统的内存寻址范围——4GB。 1、禁用页面文件当拥有了1G以上的内存时,页面文件的作用将不再明显,因此我们可以将其禁用。 方法是:依次进入注册表编辑器 “HKEY_LOCAL_MACHINESystemCurrentControlSetControlSessionMa-nagerMemoryManagement” 下,在“DisablePa-gingExecutive”(禁用页面文件)选项中将其值设为“1”即可。 PS:此举可能会造成系统不稳定.某些程序无法运行或死机。 请根据自己实际情况更改。 1G以上内存就比较够用了,玩游戏、使用大型软件不推荐禁用虚拟内存。 当然如果内存有2G的时候,可以根据自己的实际情况选择虚拟内存的使用大小(我个人认为2G内存可以禁用虚拟内存以提升系统性能,VISTA系统内存使用比较大,可以根据实际情况设定)。 2、清空页面文件在同一位置上有一个“ClearPageFileAtShutdown(关机时清除页面文件)”,将该值设为“1”。 这里所说的“清除”页面文件并非是指从硬盘上完全删除文件,而是对其进行“清洗”和整理,根据微软的说法,这是一个安全选项,与性能无关。 高级话题:使用 SweepRAM 工具。 适用于 Windows 2000/XP/2003。 网上可以找到 SweepRAM 程序。 该程序最大的作用是把所有进程的工作集清空。 所谓工作集是指进程已映射的物理内存部分(即这些内存块全在物理内存中,并且 CPU 可以直接访问),还有一部分不在工作集中的虚拟内存则可能在转换列表中(CPU 不能通过虚地址访问,需要 Windows 映射之后才能访问),还有一部分则在磁盘上的页面文件里。 工作集在进程运行时会被 Windows 自动调整,频繁访问的页面(4KB 的块)会留在内存中,而不频繁访问的页面在内存紧张时会被从工作集中移出,暂时保存在内存中的“转换列表”中,或者进一步换出到页面文件中。 当应用程序再次访问某一页面时,操作系统会将它重新加回工作集中。 SweepRAM 工具以一种适中的频率(大约 40 分钟一次)反复运行,可以将各进程的工作集清空,而之后各进程的工作集会慢慢恢复。 这样可以保持更好的工作集平衡,从而提高系统性能。 虚拟内存运行的原理以及过程可能大家都会知道虚拟内存就是当物理内存不足够的时候,把硬盘的一部分当作内存来使用。 这样理解其实不够准确物理内存就是大家平时经常说的1G内存,512M内存首先要知道:打开任何一个程序,都是要占用物理内存的 ,当关闭这个程序的时候,系统也将会从物理内存中删除这个程序的信息接着分两方面理解虚拟内存--------------假设计算机物理内存是512M,系统都安装在C盘--------------------------------------(一)当物理内存足够的时候假设,我们运行的程序占用了215M,此时物理内存绝对够用了,但是不要以为此时系统没有用虚拟内存技术,系统照样用了虚拟内存技术,当我们打开QQ的时候,系统就为QQ这个程序指定了一个虚拟空间,只是此时这个虚拟空间里面没有信息而已(二)当物理内存不足的时候假设计算机运行”迅雷”和”IE浏览器”这两个个软件的时候物理内存已经达到512M,我们启动QQ,如果没有虚拟内存技术,我们此时根本不能启动QQ, 因为QQ不能在内存中写入相关信息,不过现在有了虚拟内存技术,此时系统将会释放一部分物理内存给QQ用,假设释放的是迅雷所占用的物理内存,那么迅雷所占用的物理内存信息将会保存到硬盘上的一个的文件中当我们想再运行迅雷的时候,此时系统会从查找相应的迅雷信息,同时把这些信息重新载入到物理内存里面,并且把QQ的信息释放到里面这样一个循环交换过程就是虚拟内存技术,为什么叫它虚拟呢,因为系统把文件释放到了硬盘上,而这个硬盘可不是内存,只是临时的保存内存信息的地方一句话,虚拟内存就是用如硬盘u盘等不是内存的介质来存储内存的信息Window xp系统里面的c:/windows/prefetch这个文件夹里面的文件是虚拟内存技术的扩展,这些prefetch(预读)文件可以提升程序的运行速度当我们运行程序时候,系统会依据内存记录这个程序经常用到的文件,并且把这个程序读取信息记录下来,同时在c:/windows/prefech下创建一个后缀是的文件,并且把读取的信息保存到这文件夹里面,假设我们运行已经被记录photoshop这个程序,那么你双击桌面上的photoshop的时候,系统会先从c:/windows/prefetch中查找这个photoshop的相关记录,而不是继续运行photoshop,系统根据以前记录photoshop用到的相关文件载入到内存中,载入好后,photoshop才可以继续运行,这样运行photoshop的速度就会提升了,大家可能看着要先执行文件.再执行ps程序,这样速度还会快么?其实这个处理速度是很快的,如果没有预读文件,打开photoshop的速度会很慢的C:/windows/prefetch里面还有一个这个文件,这个文件的作用就是排列文件载入的次序,如果c:/windows/prefetch里面的预读文件很多,那么你每次运行一个程序的时候,系统都要花大量的时间去搜索这个程序有没有预读文件,这样有可能导致程序启动很慢,所以预读文件很多的时候,那么就去删除这些预读文件吧手动设置虚拟内存 ①用右键点击桌面上的“我的电脑”图标,在出现的右键菜单中选“属性”选项打开“系统属性”窗口。 在窗口中点击“高级”选项卡,出现高级设置的对话框②点击“性能”区域的“设置”按钮,在出现的“性能选项”窗口中选择“高级”选项卡,打开其对话框。 ③在该对话框中可看到关于虚拟内存的区域,点击“更改”按钮进入“虚拟内存”的设置窗口。 选择一个有较大空闲容量的分区,勾选“自定义大小”前的复选框,将具体数值填入“初始大小”、“最大值”栏中,而后依次点击“设置→确定”按钮即可,最后重新启动计算机使虚拟内存设置生效。 附文:合理设置虚拟内存根据一般的设置方法,虚拟内存交换文件最小值、最大值同时都可设为内存容量的1.5倍,但如果内存本身容量比较大,比如内存是512MB,那么它占用的空间也是很可观的。 所以我们可以这样设定虚拟内存的基本数值:内存容量在256MB以下,就设置为1.5倍;在512MB以上,设置为内存容量的一半;介于 256MB与512MB之间的设为与内存容量相同值。 由于每个人实际操作的应用程序不可能一样,比如有些人要运行3DMAX、Photoshop等这样的大型程序,而有些人可能只是打打字、玩些小游戏,所以对虚拟内存的要求并不相同,于是我们就要因地制宜地精确设置虚拟内存空间的数值。 ①先将虚拟内存自定义的“初始大小”、“最大值”设为两个相同的数值,比如500MB;②然后依次打开“控制面板→管理工具→性能”,在出现的“性能”对话框中,展开左侧栏目中的“性能日志和警报”,选中其下的“计数器日志”,在右侧栏目中空白处点击右键,选择右键菜单中的“新建日志设置”选项;③在弹出的对话框“名称”一栏中填入任意名称,比如“虚拟内存测试”。 在出现窗口中点击“添加计数器”按钮进入下一个窗口;④在该窗口中打开“性能对象”的下拉列表,选择其中的“Paging File”,勾选“从列表中选择计数器”,并在下方的栏目中选择“%Usage Peak”;勾选“从列表中选择范例”,在下方的栏目中选择“_Total”,再依次点击“添加→关闭”结束⑥在右侧栏目中可以发现多了一个“虚拟内存测试”项目,如果该项目为红色则说明还没有启动,点击该项,选择右键菜单中的“启动”选项即可接下来运行自己常用的一些应用程序,运行一段时间后,进入日志文件所在的系统分区下默认目录“PerfLogs”,找到“虚拟内存测试 _”并用记事本程序打开它,在该内容中,我们查看每一栏中倒数第二项数值,这个数值是虚拟内存的使用比率,找到这项数值的最大值,比如图中的“46”,用46%乘以500MB(前面所设定的虚拟内存数值),得出数值为230MB。 用该数值可以将初始大小设为230MB,而最大值可以根据磁盘空间大小自由设定,一般建议将它设置为最小值的2到3倍。 这样我们就可以将虚拟内存打造得更精准,使自己的爱机运行得更加流畅、更具效率 缓存简介CPU缓存(Cache Memory)位于CPU与内存之间的临时存储器,它的容量比内存小但交换速度快。 在缓存中的数据是内存中的一小部分,但这一小部分是短时间内CPU即将访问的,当CPU调用大量数据时,就可避开内存直接从缓存中调用,从而加快读取速度。 由此可见,在CPU中加入缓存是一种高效的解决方案,这样整个内存储器(缓存+内存)就变成了既有缓存的高速度,又有内存的大容量的存储系统了。 缓存对CPU的性能影响很大,主要是因为CPU的数据交换顺序和CPU与缓存间的带宽引起的。 缓存是为了解决CPU速度和内存速度的速度差异问题。 内存中被CPU访问最频繁的数据和指令被复制入CPU中的缓存,这样CPU就可以不经常到象“蜗牛”一样慢的内存中去取数据了,CPU只要到缓存中去取就行了,而缓存的速度要比内存快很多。 这里要特别指出的是:1.因为缓存只是内存中少部分数据的复制品,所以CPU到缓存中寻找数据时,也会出现找不到的情况(因为这些数据没有从内存复制到缓存中去),这时 CPU还是会到内存中去找数据,这样系统的速度就慢下来了,不过CPU会把这些数据复制到缓存中去,以便下一次不要再到内存中去取。 2.因为随着时间的变化,被访问得最频繁的数据不是一成不变的,也就是说,刚才还不频繁的数据,此时已经需要被频繁的访问,刚才还是最频繁的数据,现在又不频繁了,所以说缓存中的数据要经常按照一定的算法来更换,这样才能保证缓存中的数据是被访问最频繁的。 缓存的工作原理缓存的工作原理是当CPU要读取一个数据时,首先从缓存中查找,如果找到就立即读取并送给CPU处理;如果没有找到,就用相对慢的速度从内存中读取并送给CPU处理,同时把这个数据所在的数据块调入缓存中,可以使得以后对整块数据的读取都从缓存中进行,不必再调用内存。 正是这样的读取机制使CPU读取缓存的命中率非常高(大多数CPU可达90%左右),也就是说CPU下一次要读取的数据90%都在缓存中,只有大约 10%需要从内存读取。 这大大节省了CPU直接读取内存的时间,也使CPU读取数据时基本无需等待。 总的来说,CPU读取数据的顺序是先缓存后内存。 一级缓存和二级缓存为了分清这两个概念,我们先了解一下RAM 。 RAM和ROM相对的,RAM是掉电以后,其中的信息就消失那一种,ROM在掉电以后信息也不会消失那一种。 RAM又分两种,一种是静态RAM,SRAM;一种是动态RAM,DRAM。 前者的存储速度要比后者快得多,我们现在使用的内存一般都是动态RAM。 有的菜鸟就说了,为了增加系统的速度,把缓存扩大不就行了吗,扩大的越大,缓存的数据越多,系统不就越快了吗?缓存通常都是静态RAM,速度是非常的快, 但是静态RAM集成度低(存储相同的数据,静态RAM的体积是动态RAM的6倍), 价格高(同容量的静态RAM是动态RAM的四倍),由此可见,扩大静态RAM作为缓存是一个非常愚蠢的行为, 但是为了提高系统的性能和速度,我们必须要扩大缓存,这样就有了一个折中的方法,不扩大原来的静态RAM缓存,而是增加一些高速动态RAM做为缓存,这些高速动态RAM速度要比常规动态RAM快,但比原来的静态RAM缓存慢,我们把原来的静态ram缓存叫一级缓存,而把后来增加的动态RAM叫二级缓存。 一级缓存和二级缓存中的内容都是内存中访问频率高的数据的复制品(映射),它们的存在都是为了减少高速CPU对慢速内存的访问。 通常CPU找数据或指令的顺序是:先到一级缓存中找,找不到再到二级缓存中找,如果还找不到就只有到内存中找了。 缓存的技术发展最早先的CPU缓存是个整体的,而且容量很低,英特尔公司从Pentium时代开始把缓存进行了分类。 当时集成在CPU内核中的缓存已不足以满足 CPU的需求,而制造工艺上的限制又不能大幅度提高缓存的容量。 因此出现了集成在与CPU同一块电路板上或主板上的缓存,此时就把 CPU内核集成的缓存称为一级缓存,而外部的称为二级缓存。 一级缓存中还分数据缓存(Data Cache,D-Cache)和指令缓存(Instruction Cache,I-Cache)。 二者分别用来存放数据和执行这些数据的指令,而且两者可以同时被CPU访问,减少了争用Cache所造成的冲突,提高了处理器效能。 英特尔公司在推出Pentium 4处理器时,用新增的一种一级追踪缓存替代指令缓存,容量为12KμOps,表示能存储12K条微指令。 随着CPU制造工艺的发展,二级缓存也能轻易的集成在CPU内核中,容量也在逐年提升。 现在再用集成在CPU内部与否来定义一、二级缓存,已不确切。 而且随着二级缓存被集成入CPU内核中,以往二级缓存与CPU大差距分频的情况也被改变,此时其以相同于主频的速度工作,可以为CPU提供更高的传输速度。 二级缓存是CPU性能表现的关键之一,在CPU核心不变化的情况下,增加二级缓存容量能使性能大幅度提高。 而同一核心的CPU高低端之分往往也是在二级缓存上有差异,由此可见二级缓存对于CPU的重要性。 CPU在缓存中找到有用的数据被称为命中,当缓存中没有CPU所需的数据时(这时称为未命中),CPU才访问内存。 从理论上讲,在一颗拥有二级缓存的CPU中,读取一级缓存的命中率为80%。 也就是说CPU一级缓存中找到的有用数据占数据总量的80%,剩下的20%从二级缓存中读取。 由于不能准确预测将要执行的数据,读取二级缓存的命中率也在80%左右(从二级缓存读到有用的数据占总数据的16%)。 那么还有的数据就不得不从内存调用,但这已经是一个相当小的比例了。 目前的较高端的CPU中,还会带有三级缓存,它是为读取二级缓存后未命中的数据设计的—种缓存,在拥有三级缓存的CPU中,只有约5%的数据需要从内存中调用,这进一步提高了CPU的效率。 为了保证CPU访问时有较高的命中率,缓存中的内容应该按一定的算法替换。 一种较常用的算法是“最近最少使用算法”(LRU算法),它是将最近一段时间内最少被访问过的行淘汰出局。 因此需要为每行设置一个计数器,LRU算法是把命中行的计数器清零,其他各行计数器加1。 当需要替换时淘汰行计数器计数值最大的数据行出局。 这是一种高效、科学的算法,其计数器清零过程可以把一些频繁调用后再不需要的数据淘汰出缓存,提高缓存的利用率。 CPU产品中,一级缓存的容量基本在4KB到64KB之间,二级缓存的容量则分为128KB、256KB、512KB、1MB、2MB、4MB等。 一级缓存容量各产品之间相差不大,而二级缓存容量则是提高CPU性能的关键。 二级缓存容量的提升是由CPU制造工艺所决定的,容量增大必然导致CPU内部晶体管数的增加,要在有限的CPU面积上集成更大的缓存,对制造工艺的要求也就越高。 现在主流的CPU二级缓存都在2MB左右,其中英特尔公司07年相继推出了台式机用的4MB、6MB二级缓存的高性能CPU,不过价格也是相对比较高的,对于对配置要求不是太高的朋友,一般的2MB二级缓存的双核CPU基本也可以满足日常上网需要了。
我的CPU进程老是在80-90%,这个进程占的最多(Sytem Idle P....),请教了。
经常出现CPU占用100%的情况,主要问题可能发生在下面的某些方面: CPU占用率高的九种可能 1、防杀毒软件造成故障 由于新版的KV、金山、瑞星都加入了对网页、插件、邮件的随机监控,无疑增大了系统负担。 处理方式:基本上没有合理的处理方式,尽量使用最少的监控服务吧,者,升级你的硬件配备。 2、驱动没有经过认证,造成CPU资源占用100% 大量的测试版的驱动在网上泛滥,造成了难以发现的故障原因。 处理方式:尤其是显卡驱动特别要注意,建议使用微软认证的或由官方发布的驱动,并且严格核对型号、版本。 3、病毒、木马造成 大量的蠕虫病毒在系统内部迅速复制,造成CPU占用资源率据高不下。 解决办法:用可靠的杀毒软件彻底清理系统内存和本地硬盘,并且打开系统设置软件,察看有无异常启动的程序。 经常性更新升级杀毒软件和防火墙,加强防毒意识,掌握正确的防杀毒知识。 4、控制面板—管理工具—服务—RISING REALTIME MONITOR SERVICE点鼠标右键,改为手动。 5、开始->;运行->;msconfig->;启动,关闭不必要的启动项,重启。 6、查看“svchost”进程。 是Windows XP系统的一个核心进程。 不单单只出现在Windows XP中,在使用NT内核的Windows系统中都会有的存在。 一般在Windows 2000中进程的数目为2个,而在Windows XP中进程的数目就上升到了4个及4个以上。 7、查看网络连接。 主要是网卡。 8、查看网络连接 当安装了Windows XP的计算机做服务器的时候,收到端口 445 上的连接请求时,它将分配内存和少量地调配 CPU资源来为这些连接提供服务。 当负荷过重的时候,CPU占用率可能过高,这是因为在工作项的数目和响应能力之间存在固有的权衡关系。 你要确定合适的 MaxWorkItems 设置以提高系统响应能力。 如果设置的值不正确,服务器的响应能力可能会受到影响,或者某个用户独占太多系统资源。 要解决此问题,我们可以通过修改注册表来解决:在注册表编辑器中依次展开[HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServiceslanmanserver ]分支,在右侧窗口中新建一个名为“maxworkitems”的DWORD值。 然后双击该值,在打开的窗口中键入下列数值并保存退出: 9、看看是不是Windows XP使用鼠标右键引起CPU占用100% 在资源管理器里面,当你右键点击一个目录或一个文件,你将有可能出现下面所列问题: 任何文件的拷贝操作在那个时间将有可能停止相应 网络连接速度将显著性的降低 所有的流输入/输出操作例如使用Windows Media Player听音乐将有可能是音乐失真成因: 当你在资源管理器里面右键点击一个文件或目录的时候,当快捷菜单显示的时候,CPU占用率将增加到100%,当你关闭快捷菜单的时候才返回正常水平。 解决方法: 方法一:关闭“为菜单和工具提示使用过渡效果” 1、点击“开始”--“控制面板” 2、在“控制面板”里面双击“显示” 3、在“显示”属性里面点击“外观”标签页 4、在“外观”标签页里面点击“效果” 5、在“效果”对话框里面,清除“为菜单和工具提示使用过渡效果”前面的复选框接着点击两次“确定”按钮。 方法二:在使用鼠标右键点击文件或目录的时候先使用鼠标左键选择你的目标文件或目录。 然后再使用鼠标右键弹出快捷菜单。 一般情况下CPU占了100%的话我们的电脑总会慢下来,而很多时候我们是可以通过做一点点的改动就可以解决,而不必问那些大虾了。 当机器慢下来的时候,首先我们想到的当然是任务管理器了,看看到底是哪个程序占了较搞的比例,如果是某个大程序那还可以原谅,在关闭该程序后只要CPU正常了那就没问题;如果不是,那你就要看看是什幺程序了,当你查不出这个进程是什幺的时候就去google或者baidu搜。 有时只结束是没用的,在xp下我们可以结合msconfig里的启动项,把一些不用的项给关掉。 在2000下可以去下个winpatrol来用。 一些常用的软件,比如浏览器占用了很搞的CPU,那幺就要升级该软件或者干脆用别的同类软件代替,有时软件和系统会有点不兼容,当然我们可以试下xp系统下给我们的那个兼容项,右键点该文件选兼容性。 有时是比较头痛的,当你看到你的某个占用很大CPU时你可以去下个aports或者fport来检查其对应的程序路径,也就是什幺东西在掉用这个,如果不是c:Windowssystem32(xp)或c:winntsystem32(2000)下的,那就可疑。 升级杀毒软件杀毒吧。 右击文件导致100%的CPU占用我们也会遇到,有时点右键停顿可能就是这个问题了。 官方的解释:先点左键选中,再右键(不是很理解)。 非官方:通过在桌面点右键-属性-外观-效果,取消”为菜单和工具提示使用下列过度效果(U)“来解决。 还有某些杀毒软件对文件的监控也会有所影响,可以关闭杀毒软件的文件监控;还有就是对网页,插件,邮件的监控也是同样的道理。 一些驱动程序有时也可能出现这样的现象,最好是选择微软认证的或者是官方发布的驱动来装,有时可以适当的升级驱动,不过记得最新的不是最好的。 CPU降温软件,由于软件在运行时会利用所以的CPU空闲时间来进行降温,但Windows不能分辨普通的CPU占用和降温软件的降温指令之间的区别,因此CPU始终显示100%,这个就不必担心了,不影响正常的系统运行。 在处理较大的word文件时由于word的拼写和语法检查会使得CPU累,只要打开word的工具-选项-拼写和语法把”检查拼写和检查语法“勾去掉。 单击avi视频文件后CPU占用率高是因为系统要先扫描该文件,并检查文件所有部分,并建立索引;解决办法:右击保存视频文件的文件夹-属性-常规-高级,去掉为了快速搜索,允许索引服务编制该文件夹的索引的勾。 CPU占用100%案例分析 1、dllhost进程造成CPU使用率占用100% 特征:服务器正常CPU消耗应该在75%以下,而且CPU消耗应该是上下起伏的,出现这种问题的服务器,CPU会突然一直处100%的水平,而且不会下降。 查看任务管理器,可以发现是消耗了所有的CPU空闲时间,管理员在这种情况下,只好重新启动IIS服务,奇怪的是,重新启动IIS服务后一切正常,但可能过了一段时间后,问题又再次出现了。 直接原因: 有一个或多个ACCESS数据库在多次读写过程中损坏,微软的MDAC系统在写入这个损坏的ACCESS文件时,ASP线程处于BLOCK状态,结果其它线程只能等待,IIS被死锁了,全部的CPU时间都消耗在DLLHOST中。 解决办法: 安装“一流信息监控拦截低场保�褂闷渲械摹笆紫�募�觳楣买IS健康检查官”软件, 启用”查封我号锁模块”,设置: --wblock=yes 监控的目录,请指定您的主机的文件所在目录: --wblockdir=d: est 监控生成的日志的文件保存位置在安装目录的log目录中,文件名为 停止IIS,再启动“首席文件检查官IIS健康检查官”,再启动IIS,“首席文件检查官IIS健康检查官”会在中记录下最后写入的ACCESS文件的。 过了一段时间后,当问题出来时,例如CPU会再次一直处100%的水平,可以停止IIS,检查所记录的最后的十个文件,注意,最有问题的往往是计数器类的ACCESS文件,例如:”**”,”**”,可以先把最后十个文件或有所怀疑的文件删除到回收站中,再启动IIS,看看问题是否再次出现。 我们相信,经过仔细的查找后,您肯定可以找到这个让您操心了一段时间的文件的。 找到这个文件后,可以删除它,或下载下来,用ACCESS2000修复它,问题就解决了。 2、造成CPU使用率占用100% 在文件中,在[Windows]下面,“run=”和“load=”是可能加载“木马”程序的途径,必须仔细留心它们。 一般情况下,它们的等号后面什幺都没有,如果发现后面跟有路径与文件名不是你熟悉的启动文件,你的计算机就可能中上“木马”了。 当然你也得看清楚,因为好多“木马”,如“AOL Trojan木马”,它把自身伪装成文件,如果不注意可能不会发现它不是真正的系统启动文件。 在文件中,在[BOOT]下面有个“shell=文件名”。 正确的文件名应该是“”,如果不是“”,而是“shell= 程序名”,那幺后面跟着的那个程序就是“木马”程序,就是说你已经中“木马”了。 在注册表中的情况最复杂,通过regedit命令打开注册表编辑器,在点击至:“HKEY-LOCAL-MACHINESoftwareMicrosoftWindowsCurrentVersionRun”目录下,查看键值中有没有自己不熟悉的自动启动文件,扩展名为EXE,这里切记:有的“木马”程序生成的文件很像系统自身文件,想通过伪装蒙混过关,如“Acid Battery v1.0木马”,它将注册表“HKEY-LOCAL-MACHINESOFTWAREMicrosoftWindowsCurrentVersionRun”下的Explorer 键值改为Explorer=“”,“木马”程序与真正的Explorer之间只有“i”与“l”的差别。 当然在注册表中还有很多地方都可以隐藏“木马”程序,如:“HKEY-CURRENT-USERSoftwareMicrosoftWindowsCurrentVersionRun”、“HKEY-USERS****SoftwareMicrosoftWindowsCurrentVersionRun”的目录下都有可能,最好的办法就是在“HKEY-LOCAL-MACHINESoftwareMicrosoftWindowsCurrentVersionRun”下找到“木马该病毒也称为“Code Red II(红色代码2)”病毒,与早先在西方英文系统下流行“红色代码”病毒有点相反,在国际上被称为VirtualRoot(虚拟目录)病毒。 该蠕虫病毒利用Microsoft已知的溢出漏洞,通过80端口来传播到其它的Web页服务器上。 受感染的机器可由黑客们通过Http Get的请求运行scripts/来获得对受感染机器的完全控制权。 当感染一台服务器成功了以后,如果受感染的机器是中文的系统后,该程序会休眠2天,别的机器休眠1天。 当休眠的时间到了以后,该蠕虫程序会使得机器重新启动。 该蠕虫也会检查机器的月份是否是10月或者年份是否是2002年,如果是,受感染的服务器也会重新启动。 当Windows NT系统启动时,NT系统会自动搜索C盘根目录下的文件,受该网络蠕虫程序感染的服务器上的文件也就是该网络蠕虫程序本身。 该文件的大小是8192字节,VirtualRoot网络蠕虫程序就是通过该程序来执行的。 同时,VirtualRoot网络蠕虫程序还将的文件从Windows NT的system目录拷贝到别的目录,给黑客的入侵敞开了大门。 它还会修改系统的注册表项目,通过该注册表项目的修改,该蠕虫程序可以建立虚拟的目录C或者D,病毒名由此而来。 值得一提的是,该网络蠕虫程序除了文件外,其余的操作不是基于文件的,而是直接在内存中来进行感染、传播的,这就给捕捉带来了较大难度。 ”程序的文件名,再在整个注册表中搜索即可。 我们先看看微软是怎样描述的。 在微软知识库中对有如下描述 是从动态链接库 (DLL) 中运行的服务的通用主机进程名称。 其实是Windows XP系统的一个核心进程。 不单单只出现在Windows XP中,在使用NT内核的Windows系统中都会有的存在。 一般在Windows 2000中进程的数目为2个,而在Windows XP中进程的数目就上升到了4个及4个以上。 所以看到系统的进程列表中有几个不用那幺担心。 到底是做什幺用的呢? 首先我们要了解一点那就是Windows系统的中的进程分为:独立进程和共享进程这两种。 由于Windows系统中的服务越来越多,为了节约有限的系统资源微软把很多的系统服务做成了共享模式。 那在这中间是担任怎样一个角色呢? 的工作就是作为这些服务的宿主,即由来启动这些服务。 只是负责为这些服务提供启动的条件,其自身并不能实现任何服务的功能,也不能为用户提供任何服务。 通过为这些系统服务调用动态链接库(DLL)的方式来启动系统服务。 是病毒这种说法是任何产生的呢? 因为可以作为服务的宿主来启动服务,所以病毒、木马的编写者也挖空心思的要利用的这个特性来迷惑用户达到入侵、破坏计算机的目的。 如何才能辨别哪些是正常的进程,而哪些是病毒进程呢? 的键值是在“HKEY_LOCAL_MACHINESoftwareMicrosoftWindows NTCurrentVersionSvchost”,如图1所示。 图1中每个键值表示一个独立的组。 微软还为我们提供了一种察看系统正在运行在列表中的服务的方法。 以Windows XP为例:在“运行”中输入:cmd,然后在命令行模式中输入:tasklist /svc。 系统列出如图2所示的服务列表。 图2中红框包围起来的区域就是启动的服务列表。 如果使用的是Windows 2000系统则把前面的“tasklist /svc”命令替换为:“tlist -s”即可。 如果你怀疑计算机有可能被病毒感染,的服务出现异常的话通过搜索文件就可以发现异常情况。 一般只会找到一个在:“C:WindowsSystem32”目录下的程序。 如果你在其它目录下发现程序的话,那很可能就是中毒了。 还有一种确认是否中毒的方法是在任务管理器中察看进程的执行路径。 但是由于在Windows系统自带的任务管理器不能察看进程路径,所以要使用第三方的进程察看工具。 上面简单的介绍了进程的相关情况。 总而言之,是一个系统的核心进程,并不是病毒进程。 但由于进程的特殊性,所以病毒也会千方百计的入侵。 通过察看进程的执行路径可以确认是否中毒。 3、造成CPU使用率占用100% 症状 在基于 Windows 2000 的计算机上, 中的 CPU 使用率可能间歇性地达到100 %,并且计算机可能停止响应(挂起)。 出现此问题时,连接到该计算机(如果它是文件服务器或域控制器)的用户会被断开连接。 您可能还需要重新启动计算机。 如果 错误地处理将文件刷新到磁盘的方式,则会出现此症状。 解决方案 Service Pack 信息 要解决此问题,请获取最新的 Microsoft Windows 2000 Service Pack。 有关其它信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章: 如何获取最新的 Windows 2000 Service Pack 修复程序信息 Microsoft 提供了受支持的修补程序,但该程序只是为了解决本文所介绍的问题。 只有计算机遇到本文提到的特定问题时才可应用此修补程序。 此修补程序可能还会接受其它一些测试。 因此,如果这个问题没有对您造成严重的影响,Microsoft 建议您等待包含此修补程序的下一个 Windows 2000 Service Pack。 要立即解决此问题,请与“Microsoft 产品支持服务”联系,以获取此修补程序。 有关“Microsoft 产品支持服务”电话号码和支持费用信息的完整列表,请访问 Microsoft Web 站点: 注意 :特殊情况下,如果 Microsoft 支持专业人员确定某个特定的更新程序能够解决您的问题,可免收通常情况下收取的电话支持服务费用。 对于特定更新程序无法解决的其它支持问题和事项,将正常收取支持费用。 4、正常软件造成CPU使用率占用100% 首先,如果是从开机后就发生上述情况直到关机。 那幺就有可能是由某个随系统同时登陆的软件造成的。 可以通过运行输入“msconfig”打开“系统实用配置工具”,进入“启动”选项卡。 接着,依次取消可疑选项前面的对钩,然后重新启动电脑。 反复测试直到找到造成故障的软件。 或者可以通过一些优化软件如“优化大师”达到上述目的。 另:如果键盘内按键卡住也可能造成开机就出现上述问题。 如果是使用电脑途中出项这类问题,可以调出任务管理器(WINXP CTRL+ALT+DEL WIN2000 CTRL+SHIFT“ESC),进入”进程“选项卡,看”CPU“栏,从里面找到占用资源较高的程序(其中SYSTEM IDLE PROCESS是属于正常,它的值一般都芨撸��淖饔檬歉嫠叩鼻澳憧捎玫腃PU资源是多少,所以它的值越高越好)通过搜索功能找到这个进程属于哪个软件。 然后,可以通过升级、关闭、卸载这个软件或者干脆找个同类软件替换,问题即可得到解决。 5、病毒、木马、间谍软件造成CPU使用率占用100% 出现CPU占用率100% 的故障经常是因为病毒木马造成的,比如震荡波病毒。 应该首先更新病毒库,对电脑进行全机扫描 。 接着,在使用反间谍软件Ad—Aware,检查是否存在间谍软件。 论坛上有不少朋友都遇到过占用CPU100%,这个往往是中毒的表现。 Windows中的系统服务是以动态链接库(DLL)的形式实现的,其中一些会把可执行程序指向,由它调用相应服务的动态链接库并加上相应参数来启动服务。 正是因为它的特殊性和重要性,使它更容易成为了一些病毒木马的宿主。 6、进程造成CPU使用率占用100% 在文件中,在[BOOT]下面有个“shell=文件名”。 正确的文件名应该是“”,如果不是“”,而是“shell= 程序名”,那幺后面跟着的那个程序就是“木马”程序,就是说你已经中“木马”了。 在注册表中的情况最复杂,通过regedit命令打开注册表编辑器,在点击至:“HKEY-LOCAL-MACHINESoftwareMicrosoftWindowsCurrentVersionRun”目录下,查看键值中有没有自己不熟悉的自动启动文件,扩展名为EXE,这里切记:有的“木马”程序生成的文件很像系统自身文件,想通过伪装蒙混过关,如“Acid Battery v1.0木马”,它将注册表“HKEY-LOCAL-MACHINESOFTWAREMicrosoftWindowsCurrentVersionRun”下的 Explorer 键值改为Explorer=“”,“木马”程序与真正的Explorer之间只有“i”与“l”的差别。 当然在注册表中还有很多地方都可以隐藏“木马”程序,如:“HKEY-CURRENTUSERSoftwareMicrosoftWindowsCurrentVersionRun”、“HKEYUSERS****SoftwareMicrosoftWindowsCurrentVersionRun”的目录下都有可能,最好的办法就是在“HKEYLOCALMACHINESoftwareMicrosoftWindowsCurrentVersionRun”下找到“木马”程序的文件名,再在整个注册表中搜索即可。 7、超线程导致CPU使用率占用100% 这类故障的共同原因就是都使用了具有超线程功能的P4 CPU。 我查找了一些资料都没有明确的原因解释。 据一些网友总结超线程似乎和天网防火墙有冲突,可以通过卸载天网并安装其它防火墙解决,也可以通过在BIOS中关闭超线程功能解决。 8、AVI视频文件造成CPU使用率占用100% 在Windows XP中,单击一个较大的AVI视频文件后,可能会出现系统假死现象,并且造成进程的使用率100%,这是因为系统要先扫描该文件,并检查文件所有部分,建立索引。 如果文件较大就会需要较长时间并造成CPU占用率100%。 解决方法:右键单击保存视频文件的文件夹,选择”属性—>常规—>高级“,去掉”为了快速搜索,允许索引服务编制该文件夹的索引“前面复选框的对钩即可。 9、杀毒软件CPU使用率占用100% 现在的杀毒软件一般都加入了,对网页、邮件、个人隐私的即时监空功能,这样无疑会加大系统的负担。 比如:在玩游戏的时候,会非常缓慢。 关闭该杀毒软件是解决得最直接办法。 10、处理较大的Word文件时CPU使用率过高 上述问题一般还会造成电脑假死,这些都是因为WORD的拼写和语法检查造成的,只要打开WORD的“工具—选项”,进入“拼写和语法”选项卡,将其中的“键入时检查拼写”和“键入时检查语法”两项前面的复选框中的钩去掉即可。 11、网络连接导致CPU使用率占用100% 当你的Windows2000/xp作为服务器时,收到来自端口445上的连接请求后,系统将分配内存和少量CPU资源来为这些连接提供服务,当负荷过重,就会出现上述情况。 要解决这个问题可以通过修改注册表来解决,打开注册表,找到HKEY—LOCAL—MACHNESYSTEMCurrentControlSetServiceslanmanserver,在右面新建一个名为;maxworkitems;的DWORD值.然后双击该值,如果你的电脑有512以上内存,就设置为;1024;,如果小于512,就设置为256. 一些不完善的驱动程序也可以造成CPU使用率过高 经常使用待机功能,也会造成系统自动关闭硬盘DMA模式。 这不仅会使系统性能大幅度下降,系统启动速度变慢,也会使是系统在运行一些大型软件和游戏时CPU使用率100%,产生停顿。 进程占用CPU 100%时可能中的病毒 system Idle Process 进程文件: [system process] or [system process] 进程名称: Windows内存处理系统进程 描 述: Windows页面内存管理进程,拥有0级优先。 介 绍:该进程作为单线程运行在每个处理器上,并在系统不处理其它线程的时候分派处理器的时间。 它的CPU占用率越大表示可供分配的CPU资源越多,数字越小则表示CPU资源紧张。 进程文件: spoolsv or 进程名称: Printer Spooler Service 描 述: Windows打印任务控制程序,用以打印机就绪。 介 绍:缓冲(spooler)服务是管理缓冲池中的打印和传真作业。 →打印任务控制程序,一般会先加载以供列表机打印前的准备?
免责声明:本文转载或采集自网络,版权归原作者所有。本网站刊发此文旨在传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及版权、内容等问题,请联系本网,我们将在第一时间删除。同时,本网站不对所刊发内容的准确性、真实性、完整性、及时性、原创性等进行保证,请读者仅作参考,并请自行核实相关内容。对于因使用或依赖本文内容所产生的任何直接或间接损失,本网站不承担任何责任。