
随着人们对计算机紧凑性设计的要求越来越高,计算机的CPU芯片也在朝着高度集成的方向不断发展,由此造成其在性能方面对温度也更加敏感,其散热技术也成为了相关领域的研究 热点 。下面是我为大家推荐的 cpu 对计算机影响论文,供大家参考。
cpu对计算机影响论文 范文 一:计算机CPU论文
摘要: CPU 是计算机进行运算的核心, 主要性能指标有字长、频率、高速缓存、前端总线频率、超线程技术的应用、支持的扩展指令集等对整个计算机的性能起着至关重要的作用。在计算机的使用中常见的CPU 超频故障、计算机感染病毒使CPU 性能大幅度下降,偶伴随 死机 等现象, 逐步掌握CPU 主要性能与故障的排除技巧, 达到举一反三的效果。
关键词: CPU; 性能指标; 高速缓存; 显示器 黑屏; 故障排除
1 计算机CPU 的主要性能指标
Central Processing Unit, CPU 通常也称“微处理器”或“中央处理器”, 是计算机进行运算的核心, 在计算机系统中相当于“大脑”,主要负责计算机的数据运算和发出计算机的控制指令, 是控制计算机中其他设备运行的“总指挥”。在计算机的发展过程中, CPU 技术的发展一直是计算机技术发展的重点, 在计算机的使用中CPU 的故障排除也是一个难点, 有待我们认真地研究, 以加深对CPU的了解, 逐步掌握CPU 常见故障的排除 方法 与技巧, 配合CPU 工作, 协调CPU 的处理速度, 在使用中达到举一反三的效果。
11 CPU“字长”是表示运算器性能的主要技术指标:在
计算机技术中, 把CPU 在单位时间内一次处理的二进制数的位数称为“字长”。一般情况下, 把单位时间内能处理为8 位数据的CPU 叫8 位CPU。同理, 64 位的CPU 在单位时间内能处理字长为64 位的二进制数据。字长是表示运算器性能的主要技术指标,通常等于CPU 数据总线的宽度。CPU 字长越长, 运算精度越高, 信息处理速度越快, CPU 性能也就越高。
12 CPU 的频率与CPU 的外频和倍频的关系:CPU 的频率是指计算机运行时的工作频率, 也称为“主频”或“时钟频率”。CPU 的频率表示CPU 内部数字脉冲信号振荡的速度, 代表了CPU 的实际运算速度, 单位是Hz。CPU 的频率越高, 在一个时钟周期内所能完成的指令数也就越多, CPU 的运算速度也就越快。
121 倍频越高, CPU 的频率就越高,CPU 实际运行的频率与CPU 的外频和倍频有关, CPU 的实际频率=外频!倍频。外频即CPU 的基准频率, 是CPU 与主板之间同步运行的速度。外频速度越高, CPU 就可以同时接受更多来自外围设备的数据, 从而使整个系统的速度进一步提高。倍频是CPU 运行频率与系统外频之间差距的参数, 也称为“倍频系数”, 通常简称为“倍频”。在相同的外频下, 倍频越高, CPU 的频率就越高。
122 主频越高, CPU 的速度也就越快,当我们使用CPU 时, 通常会说到“奔腾Ⅲ 600”、“奔腾4 30”等等, 其实, 这些型号里面的数字“600”和“30”就是指CPU 的主频。CPU 的主频一般以MHz 为单位, 通常所说的“奔腾Ⅲ600”中的“600”实际上就是指该CPU 的主频是600MHz。但随着CPU 主频的提高, 一般以GHz( 1GHz=1000MHz) 为单位, 如“奔腾4 30”中的30 即指该CPU 的工作频率是30GHz, 即3000MHz。一般说来,一个时钟周期完成的指令数是固定的, 因此主频越高, CPU 的速度也就越快。
13 缓存容量越大, 性能也就越高:
131 缓存(Cache) 的作用是为CPU 和内存进行数据
交换时提供一个高速的数据缓冲区。当CPU 要读取数据时, 首先会在缓存中寻找, 如果找到了则直接从缓存中读取, 如果在缓存中未能找到, 那么CPU 就从主内存中读取数据。CPU 缓存一般分为L1 高速缓存和L2 高速缓存。
132 一级高速缓存与二级高速缓存对CPU 的性能影响L1 高速缓存也称为一级高速缓存( L1Cache) 用于暂存部分指令和数据, 以使CPU 能迅速地得到所需要的数据。L1 高速缓存与CPU 同步运行, 其缓存容量大小对CPU 的性能影响较大。__L2 高速缓存也称为二级高速缓存( L2Cache) 的容量和频率对CPU 的性能影响也较大, 其作用就是协调
CPU 的运行速度与内存存取速度之间的差异。L2 高速缓存是CPU 晶体管总数中占得最多得一部分, 由于L2 高速缓存得成本很高, 因此L2 高速缓存得容量大小一般用来作为高端和低端CPU 产品得分界标准。目前CPU 的L2 高速缓存有低至64KB 的, 也有高达4MB 的。
14 前端总线频率比外频更具代表性:前端总线频率是AMD 公司在推出K7CPU 时提出的概念, 一直以来很多人都误认为这个名词是外频的一个别称。其实, 通常所说的外频是指CPU 与主板的连接速度, 这个概念建立在数字脉冲信号振荡速度的基础之上, 而前端总线频率指的是数据传输的实际速度, 即每秒钟CPU 可以接收的数据传输量。例如100MHz 外频是指数字脉冲信号在每秒钟振荡1000 万次, 而1001MHz 前端总线频率则是指CPU 每秒钟可接受的数据传输量是100MHz!64bit/8bit/Byte=800MB。就处理器速度而言, 前端总线比外频更具代表性。
15 CPU 的制造工艺直接关系到CPU 的电气性能:
151 CPU 在更高的频率下工作,线路宽度越小, CPU 的功耗和发热量就越低目前Inter 公司的主流产品的制造工艺已经达到0065 m 级别。由于CPU 制造完成后, 是一块不到1cm2 的硅晶片( 或集成电路) , 还要对其进行封装, 并安装引脚( 或称为“针”) 后才能插到主板上、通常所说的Socket478 和Socket939 中的数值的就是指该CPU 的引脚数, CPU 的封装一般有陶瓷封装和树脂封装两种。
152 超线程技术的应用超线程(Hyper- Threading,HT) 是Inter 公司为Pentium4 专门设计的一项技术。超线程是一种同步多线执行技术, 一款应用超线程技术的IntelCPU 可以在逻辑上被模拟成两个任务。当计算机系统应用超线程技术后, 可使整机性能提高25%以上。
16 支持的扩展指令集对提高CPU 的效率具有重要作用:指令集是CPU 用来计算和控制系统的命令, 是与硬件电路相配合的一系列指令。指令集是评价CPU 性能的重要指标之一。目前指令集有Intel 公司的MMX、SSE、SSE2、SSE3 和AMD 公司的“3DNow! ”等。MMX(Multi Media Extensions,多媒体扩展)指令集由Intel 公司开发, 包括57 条多媒体指令, 通常这些指令可以同时处理多个数据, 提高CPU 处理图形、视频和音频的能力。SSE(Streaming SIMDExtensions,单指令多数据流扩展)指令集是MMX指令集的扩展, 是Intel 公司在Pentium3 处理器中开始使用的。SSE2 支持双精度浮点数的SIMD 处理, 用在64 位CPU 中。SSE3 是Intel 公司在最新的Pentium 4 Prescott 处理器中为了增强Pentium 4 CPU 在多媒体方面的性能二新增加的一组指令集合, 有助于增强Intel CPU 的超线程功能。“3DNow! ”指令集广泛
应用于AMD 公司的K6- 2,K6- 3 以及Athlon( k7) 处理器中。在软件的配合下, 可以大幅度提高3D 处理性能。“3Dnow! ”指令集是最早的三维指令集。
2 计算机使用中CPU 常见故障的排除
21 故障现象:一般说来, CPU 是不容易出现故障的, 但由于超频或者电压工作不稳定和CPU 的制造工艺的不同等原因, 会导致CPU 不能正常工作, 显示器突然黑屏, 重启后无效, 更严重者会烧坏CPU。(1)CPU 超频是 DIY 族最喜欢干的事情, 有的CPU 本身不具备超频能力却硬要超频, 有的CPU 超频的余量很小, 却让它超出额定频率较大的范围工作, 其结果将导致电脑工作不正常, 经常出现死机现象。因为CPU 超频使用, 而且是硬超, 有可能是超频不稳定引起的故障。如开机后用手摸一下CPU, 发现非常烫, 则故障就可能在此。解决的方法是: 用户可以找到CPU 的外频与倍频跳线, 逐步降频后, 启动电源, 系统恢复正常, 显示器也就有了显示。也有可能是过度超频之后, 电脑启动时可能出现散热风扇转动正常, 但硬盘指示灯只亮了一下便没有反应了, 显示器也维持待机状态的故障。由于此时不能进入 BIOS 设置选项, 因此只能给CPU 降频。具体方法是打开机箱并在主板上找到给CMOS 放电的跳线, 给CMOS放电后重启系统即可。值得注意的是内存大小、硬盘速度、显卡速度,
特别是CPU 的性能指标, 对整个计算机的性能无不起着至关重要的作用, 因此盲目追求CPU 一级高速缓存与二级高速缓存、前端总线频率的高速并不可取。(2) 电压不正常导致CPU 烧坏。常见的故障现象是开机后黑屏, 只听到CPU 风扇在转动, 没有开机自检。解决方法: 根据故障现象可以排除电源的故障, 开机后风扇在转动, 说明计算机是通电的。但是不能自检, 也就不能听到“滴”的一声响, 此时怀疑是主板或CPU 的故障, 初步判断后, 采用替换法进行确认。首先找一台同等配置的好的计算机, 把此台计算机的CPU 拆下, 换到有故障的计算机上, 开机后如果能启动并正常进入系统, 说明该台计算机的故障就是CPU 有问题, 仔细查看CPU,发现针角处有发黑的地方, 说明是由于电压不稳定导致CPU 被烧坏。
22 计算机感染病毒, CPU 性能大幅度下降, 偶伴随死
机现象:(1)该故障原因可能是感染了病毒, 或磁盘碎片过多或CPU 温度过高。解决方法是首先可以使用杀毒软件查杀病毒, 然后使用Windows 附带的“磁盘碎片整理”程序进行整理。如果还不能解决问题, 则打开机箱, 查看CPU 散热器的风扇通电后是否转动, 如果不转动, 则更换新散热器即可。(2)蠕虫病毒发作使CPU 占用率为何高达100%。故障现象: 即开机使用一段时间后, 硬盘指示灯不停地闪, 同时
系统运行速度变得非常慢, “任务管理器”窗口中显示CPU 地占用率100%。只有重新启动才能继续使用。但过一段时间后又是如此。从故障描述可知, 计算机系统感染了某种蠕虫病毒。在正常情况下, 在不运行大型的程序时, CPU 在瞬间的占用率不可能为100%。而蠕虫病毒发作的时候就会将剩余的系统资源占满。这时, 用户可以在“任务管理器”窗口中查看哪个程序占用的CPU 资源最多, 如果是一个陌生的程序, 建议用户使用杀毒软件( 最好使用最新的杀毒库) 对系统进行彻底的检查。如果还无法解决该问题,最好重新安装 *** 作系统 , 并且安装病毒防火墙。这样, 能彻底解决问题。
23 CPU 风扇不转导致计算机死机:故障现象: 一台计
算机开机进入系统后不久就死机, 重新启动计算机后故障依旧。解决方法: 打开机箱, 查看机箱内各设备的运行情况, 发现CPU 风扇转动的很慢, 处于似转非转的状态, 由此想到造成重启的原因可能是由于CPU 风扇不能正常运转而导致CPU 无法散热, 从而使CPU 温度急剧上升, 最后出现死机。因为是突然黑屏, 可能是硬件有松动而引起接触不良。可打开机箱把硬件重新插一遍后开机, 有可能是显卡有问题, 因为从显示器的指示灯来判断无信号输出, 使用“替换法”检查, 显卡没问题, 那么此时有可能是显示器有故障,
使用“替换法”再检查, 同样没有发现问题, 接着检查CPU, 发现CPU 的针脚有点发黑和绿斑, 这是生锈的迹象。看来问题就在此处, 因为制冷片有结露的现象, 一定是制冷片的表面温度过低而结露, 导致CPU 长期处于潮湿的环境中, 日积月累, 就会产生太多锈斑, 造成接触不良, 从而发生此故障。找到问题的所在点后, 要拆掉CPU 风扇, 给风扇添加润滑油并清理风扇上的灰尘, 再重新安装CPU 风扇。开机后CPU 风扇转动正常, 死机现象也就消除了。还可以取出CPU, 用橡皮仔细地把每一个针脚都擦一遍, 然后把散热片上的制冷片取下, 清洁干净, 最后装好CPU 和制冷片开机, 即可正常启动。
计算机由于各种原因总会出现一些故障。特别当遇到CPU 常见故障时, 我们应该对CPU 的主要性能指标有充分的了解, 分析故障原因, 掌握常用的排除方法与技巧, 避免CPU 故障造成计算机黑屏、死机等麻烦。
参考文献:
[1] 熊巧玲,吕良燕,高明伟电脑组装与维护技能实训
[M]北京:科学出版社,2007
[2] 谭贤电脑组装、维护与故障排除[M]北京:机械工业出版社,2007
[3] 网冠科技编著电脑急救、备份还原、BIOS、注册表设计[M]北京:机械工业出版社,2007
[4] 张景生台式计算机使用与维修[M]北京:国防工业出版社,2007[5] __功、修红海计算机组装与维护[M]北京:中华工商联合出版社,2007
cpu对计算机影响论文范文二:计算机组成原理——CPU 论文
摘 要 CPU是计算机进行运算的核心,其重要性相当于人体的大脑,起着至关重要的作用。CPU的主要性能指标有字长、频率、高速缓存、前端总线频率、超线程技术的应用、支持的扩展指令集等等,对整个计算机的性能起着至关重要的作用。要从了解CPU的发展历程,运行原理以及故障排除等多方面了解CPU,从而达到对CPU的全面认识。
关健词 CPU 历史 工作原理 故障排除
The priciple of the Computer Compoment--CPU
Wu Min
Abstract CPU is the core of computer operations, its importance is equivalent to the human brain, plays a vital role in
The main properties of CPU index word length, frequency, cache, FSB, hyper threading technology, support the instruction set extensions on the whole computer plays an important role in the performance To understand the development history of CPU, operation principle and troubleshooting to know more about CPU, to achieve a comprehensive understanding of CPU
Keywords CPU,History, Working priciple , Troubleshooting
引言
CPU是Central Processing Unit(中央微 处理器)的缩写,又称为微处理器。随着网络时代的到来,网络通信、信息安全和信息家电产品将越来越普及,而CPU正是所有这些信息产品中必不可少的部件,CPU主要由运算器和控制器组成,是微型计算机硬件系统中的核心部件,起着控制整个微型计算机系统的作用。
CPU性能的高低通常决定了一台计算机的档次。
世界上生产CPU芯片主要有Intel和AMD两家公司。Intel公司生产的CPU始终占有相当大的市场。目前,Intel公司生产的CPU主要有赛扬系列、奔腾系列、酷睿系列等。AMD公司的CPU占有相当的市场份额。AMD公司生产的CPU主要有闪龙系列、速龙系列等。
协调工作,决定了计算机的整体性能。CPU主要由运算器、控制器、寄存器组和内部总线等构成。寄存器组用于在指令执行过后存放 *** 作数和中间数据,由运算器完成指令所规定的运算及 *** 作。
CPU的发展非常迅速,个人电脑从8088(XT)发展到现在的Pentium 4时代,只经过了不到二十年的时间。
1971 Intel 4004,世界上第一款微处理器 1974 Intel 8008,第一个8位的微处理器; 1974 Intel 8080,第一个真正的微处理器; 1978 Intel 8086,16位微处理器; Intel 80186; 1982 Intel 80286;
1985 Intel 80386,新一代32位核心微处理器; 1989 Intel 80486; 1993 Pentium(奔腾);
从生产技术来说,最初的8088集成了29000个晶体管,而PentiumⅢ的集成度超过了2810万个晶体管;CPU的运行速度,以MIPS(百万个指令每秒)为单位,8088是075MIPS,到高能奔腾时已超过了1000MIPS。
1 CPU的简介和历史发展
CPU的外部组成:控制单元,存储单元(寄存器,缓存),逻辑运算单元。
CPU的外部组成:芯片,金属壳(保护CPU,增加散热面积),引脚(固定CPU,连通电路)。
CPU是计算机的核心部件,处理计算机中的所有数据,使计算机完成各种功能,并使各部件
CPU从最初发展至今期间,按照其处理信息的字长,CPU可以分为:4位微处理器、8位微处理器、16位微处理器、32位微处理器以64位微处理器,基本上可以说个人电脑的发展是随着CPU的发展而前进的。
1971年世界第一台微处理器Inter的4004出现,内部集成2300个晶体管;1978年Inter16位处理器8086和与之配合的数学协处理器8087同时推出;1979年Inter8088推出,内含27000个晶体管,外部数据总线减少为8位,也首次运用于IBM PC中,预示微机时代即将来临1982年Inter又推出了16位的80286,内部晶体管134万个,时频由最初的6MHZ升为20MHZ;1985年32位处理器80386推出,时频达到125MHZ以上;1989年集成120万晶体管的80486出现,时频90MHZ,性能比386提高了4倍;1993年奔腾时代来临,奔腾1,世界上第一台586级处理器,310万晶体管,时频200MHZ;1996年奔腾Pro,550万晶体管,处理速度是一代的2倍;同时第一次采用2级内存,同年奔腾MMX推出,L1缓存加倍;1997年,奔腾Pro与MMX结合,奔腾2出现,性能大大提高;1998年奔腾3出现,一级缓存2KB,二级缓存512KB,安全性能大大提高;2000年奔腾4推出,主频超过17GHZ之后又出了双核,四核Inter处理器的发展就代表了CPU的发展,其中不乏其他公司产品,如AMD等
2 CPU的运行原理及过程
21 CPU的运行原理
CPU的主要运作原理,不论其外观,都是执行储存于被称为程序里的一系列指令。在此讨论的是遵循普遍的冯·诺伊曼结构(von Neumann architecture)设计的装置。程序以一系列数字储存在计算机存储器中。差不多所有的冯·诺伊曼CPU 的运作原理可分为四个阶段: 提取、解码、执行和写回。
第一阶段,提取,从程序存储器中检索指令(为数值或一系列数值)。由程序计数器指定程序存储器的位置,程序计数器保存供识别目前程序位置的数值。换言之,程序计数器记录了CPU在目前程序里的踪迹。提取指令之后,PC根据指令式长度增加存储器单元[iwordlength]。指令的提取常常必须从相对较慢的存储器查找,导致CPU等候指令的送入。这个问题主要被论及在现代处理器的高速缓存和管线化架构。
CPU根据从存储器提取到的指令来决定其执行行为。在解码阶段,指令被拆解为有意义的片断。根据CPU的指令集架构(ISA)定义将数值解译为指令[isa]。一部分的指令数值为运算码,其指示要进行哪些运算。 其它 的数值通常供给指令必要的信息,诸如一个加法运算的运算目标。这样的运算目标也许提供一个常数值(即立即值),或是一个空间的寻址值:暂存器或存储器地址,以寻址模式决定。在旧的设计中,CPU里的指令解码部分是无法改变的硬体装置。不过在众多抽象且复杂的CPU和ISA中,一个微程序时常用来帮助转换指令为各种形态的讯号。这些微程序在已成品的CPU 中往往可以重写,方便变更解码指令。
在提取和解码阶段之后,接着进入执行阶段。该阶段中,连接到各种能够进行所需运算 的CPU部件。例如要求一个加法运算,算术逻辑单元将会连接到一组输入和一组输出。输入提供了要相加的数值,而且在输出将含有总和结果。ALU内含电路系统,以于输出端完成简单的普通运算和逻辑运算(比如加法和位运算)。如果加法运算产生一个对该CPU处理而言过大的结果,在标志暂存器里,溢出标志可能会被设置。
最终阶段,写回。以一定格式将执行阶段的
结果简单的写回。运算结果极常被写进CPU内部的暂存器,以供随后指令快速访问。在其它案例中,运算结果可能写进速度较慢,但容量较大且较便宜的主存。某些类型的指令会 *** 作程序计数器,而不直接产生结果数据。这些一般称作“跳转”并在程序中带来循环行为、条件性执行(透过条件跳转)和函数[jumps]。许多指令也会改变标志暂存器的状态位。这些标志可用来影响程序行为,缘由于它们时常显出各种运算结果。例如,以一个“比较”指令判断两个值的大小,根据比较结果在标志暂存器上设置一个数值。这个标志可借由随后的跳转指令来决定程序动向。
在执行指令并写回结果数据之后,程序计数器的值会递增,反复整个过程,下一个指令周期正常的提取下一个顺序指令。如果完成的是跳转指令,程序计数器将会修改成跳转到的指令地址,且程序继续正常执行。许多复杂的CPU可以一次提取多个指令、解码,并且同时执行。这个部分一般涉及“经典RISC管线”,那些实际上是在众多使用简单CPU的电子装置中快速普及(常称为单片机)。
CPU 数字表示方法是一个设计上的选择,这个选择影响了设备的工作方式。一些早期的数字计算机内部使用电气模型来表示通用的十进制(基于10 进位)数位系统数字。还有一些罕见的计算机使用三进制表示数字。几乎所有的现代的CPU 使用二进制系统来表示数字,这样数字可以用具有两个值的物理量来表示,例如高低电平[binaryvoltage]等等。
与数表示相关的是一个CPU可以表示的数的大小和精度,在二进制CPU 情形下,一个位(bit)指的是CPU处理的数中的一个有意义的位,CPU用来表示数的位数量常常被称作“字长”, “位宽”, “数据通路宽度”或者当严格地涉及到整数(与此相对的是浮点数)时称作“整数精度”、该数量因体系结构而异,且常常在完全相同的CPU的不同部件中也有所不同。 实际上,整数精度在CPU可执行的软件所能利用的整数取值范围上设置了硬件限制。整数精度也可影响到CPU可寻址(寻址)的内存数量。譬如,如果二进制的CPU使用32位来表示内存地址,而每一个内存地址代表一个八位组,CPU 可定位的容量便是232个位组或4GB。以上是简单描述的CPU地址空间,通常实际的CPU 设计使用更为复杂的寻址方法,例如为了以同样的整数精度寻址更多的内存而使用分页技术。
2更高的整数精度需要更多线路以支持更多的数字位,也因此结构更复杂、更巨大、更花 费能源,也通常更昂贵。因此尽管市面上有许多更高精准度的CPU如 16、32、64甚至128位,但依然可见应用软件执行在4或8位的单片机上。越简单的单片机通常较便宜,花费较少能源,也因此产生较少热量。这些都是设计电子设备的主要考量。
22 CPU的运行过程
数据从输入设备流经内存,等待CPU的处理,这些将要处理的信息是按字节存储的,也就是以8位二进制数或8比特为1个单元存储,这些信息可以是数据或指令。数据可以是二进制表示的字符、数字或颜色等等。而指令告诉CPU对数据执行哪些 *** 作,比如完成加法、减法或移位运算。 假设在内存中的数据是最简单的原始数据。首先,指令指针(Instruction Pointer)会通知CPU,将要执行的指令放置在内存中的存储位置。因为内存中的每个存储单元都有编号(称为地址),可以根据这些地址把数据取出,通过地址总线送到控制单元中,指令译码器从指令寄存器IR中拿来指令,翻译成CPU可以执行的形式,然后决定完成该指令需要哪些必要的 *** 作,它将告诉算术逻辑单元(ALU)什么时候计算,告诉指令读取器什么时候获取数值,告诉指令译码器什么时候翻译指令等等。假如数据被送往算术逻辑单元,数据将会执行指令中规定的算术运算和其他各种运算。当数据处理完毕后,将回到寄存器中,通过不同的指令将数据继续运行或者通过DB总线送到数据缓存器中。基本上,CPU就是这样去执行读出数据、处理数据和往内存写数据3项基本工作。但在通常情况下,一条指令可以包含按明确顺序执行的许多 *** 作,CPU的工作就是执行这些指令,完成一条指令后,CPU的控制单元又将告诉指令读取器从内存中读取下一条指令来执行。这个过程不断快速地重复,快速地执行一条又一条指令,产生你在显示器上所看到的结果。在处理这么多指令和数据的同时,由于数据转移时差和CPU处理时差,肯定会出现混乱处理的情况。为了保证每个 *** 作准时发生,CPU需要一个时钟,时钟控制着CPU所执行的每一个动作。时钟就像一个节拍器,它不停地发出脉冲,决定CPU的步调和处理时间。
参考文献:
《电子计算机组成原理》 蒋本珊 北京理工大学
《计算机组成原理》第二版,唐朔飞 编著,高等 教育 出版社,20081
《计算机导玉龙论》作者:王 电子工业出版社 《计算机科学导论》作者:王志强 机械工业出版社 《微型计算机原理与应用》肖金立 编著,电子工业出版社,2003-1
一、背景和现象
初创公司,架构lanmp,web前端和后端分开服务器,业务驱动主要是nginx和apache,nginx主要是处理静态文件和反向代理,前后端、搜索引擎、缓存、队列等附加的服务都是用docker容器部署。因为比较初级,上传文件和采集文件都是直接写在硬盘上,涉及到的目录共享,就在其中一台服务器存储并且nfs共享。我们暂且分为ECS1(apache1)、ECS2(apache2)、ECS3(nginx)。某天网站业务中断,但是没有报错。一直在等待响应,默认响应超时是一分钟,所以很基础高可用没有起到作用。中断10分钟左右,重启服务,提示“open too many files”,但是lsof统计没几个。因为初级处理不了,所以直接重启服务器,一段时间后一切恢复正常,可是第二天又来一次这种情况。
二、第一次出现后的排查思路
本来第一次发现这种问题的时候就要追查原因了,看了一下zabbix监控图像其中断了十分钟,包括网络、内存、CPU、硬盘、IO等监控数据。首先想到的是网络问题,结论是zabbix-servert获取不到了zabbix-agent采集的数据,估计就是网络不通了。
但是,这个结论站不住脚,因为我本身通过ssh登录服务器,并且命令输入无卡顿,不至于头文件都传不过来。后来一看阿里云的云监控,上面有数据,似乎也可以佐证网络这个说法,因为云监控是阿里云内部的监控,可以内网获取到监控数据。直到看CPU的使用率这项,发现有一段时间的CPU使用率100%。并且我重启的时候CPU恢复正常,不能说网络一定没问题,但系统肯定有问题。也可以解释因为CPU使用已经是100%,zabbix-agent和根本不能正常运行,所以没有监控数据。因为这个公司全部都是云服务器,没有使用IDC所以我们也没有安装smokeping来监控,接着我们就不把重心在网络上了。
目前掌握的信息就是:在毫无征兆的情况下,CPU暴涨到100%,重启之前一直保留,重启之后恢复原样。匆忙之中又看了一下系统各日志,因为太匆忙,没有总结,没有找到什么有价值的东西。现在有下面几种猜想:第一,程序的bug或者部署不当,触发之后耗尽资源。第二、docker容器的bug。第三、网络攻击。第四、病毒入侵。第五、阿里云方系统不稳定。
小总结了一下,现在问题还没有找出来。下次还有这个问题的可能,所以先尽量防范,但是又不能重启一刀切。所以在zabbix上面设置了自动化,当检测到ECS1获取不到数据的时候马上 *** 作ECS3标记后端为ECS1的apache为down。保留异常现场。(请求停止的时候,CPU100%还在)
三、现场排查
1、相应的排查计划(想到这些信息需要获取的,实际上没有严格按照这样的步骤)
1)用htop和top命令监控CPU、内存使用大的进程。先看看哪个进程消耗资源较多,用户态、内核态、内存、IO……同时sar -b查io的 历史 定时抽样。
2)统计tcp连接数,看看有没有DDOS攻击。netstat -anp |grep tcp |wc -l 。用iftop-i eth1看看通讯。同时用tail -n 1200 /var/log/messages查看内核日志。
3)用pstree查看打开进程,ps aux|wc-l看看有没有特别多的进程。虽然zabbix监控上说没有,但是我们要检查一下看看有没有异常的进程名字。
4)查看全部容器的资源使用docker stats $(docker ps -a -q),看看能不能从容器上排查。
5)有了“too many open files”的启发,计算打开文件数目lsof|wc -l,根据进程看看ll /proc/PID/fd文件描述符有没有可疑的打开文件、文件描述符。
6)关于用lsof打开文件数找到的线索,排序打开文件找出进程号 lsof -n|awk '{print $2}'|sort|uniq -c|sort -nr|more
7)关于用lsof打开文件数找到的线索,用lsof -p PID查看进程打开的句柄。直接查看打开的文件。
8)启动容器的时候又总是“open too many files"。那就是打开文件数的问题,因为CPU的使用率是CPU的使用时间和空闲时间比,有可能因为打开文件数阻塞而导致CPU都在等待。针对连接数的问题,大不了最后一步试试echo 6553500 > /proc/sys/fs/file-max 测试打开文件对CPU的影响。
9)玩意测出来了消耗CPU的进程,可以使用strace最终程序。用户态的函数调用跟踪用「ltrace」,所以这里我们应该用「strace」-p PID
10)从程序里面看到调用系统底层的函数可以跟踪。跟踪 *** 作 strace -T -e -p PID,主要看看代码调用的函数有没有问题。
2、现场排查
第二天同样时间,ECS果然暴涨了CPU。这是时候zabbix的工作如希望进行保留了一台故障的ECS1给我。
1)用htop看到资源使用最大是,搜索引擎下我写的一个判断脚本xunsearchsh。脚本里面很简单,判断索引和搜索服务缺一个就全部重启。就当是我的容器有问题我直接关掉搜索引擎容器。httpd顶上,我又关掉apache容器。rabbitmq相关进程又顶上。这时候我没心情周旋了,肯定不也是这个原因。sar -b查看的 历史 io也没有异常。
2)统计tcp连接,几百。先不用着重考虑攻击了。用tail -n 1200 /var/log/messages查看内核日志,是TCP TIME WAIT的错误。可以理解为CPU使用100%,程序无响应外面的tcp请求超时。这是结果,还是没有找到根本原因。
接着往下看系统内核日志,发现了和“open too many files”呼应的错误,“file-max limit 65535 reached”意思是,已到达了文件限制瓶颈。这里保持怀疑,继续收集其他信息。
3)查看进程数量,数量几百。列出来也看到都是熟悉的进程,可以先排除异常进程。
4)监控容器的资源使用,里面很不稳定,首先是xunsearch容器使用80%的CPU,关掉xunsearch,又变成了其他容器使用CPU最高。很大程度上可以排查容器的问题和执行程序的问题。
5)查看了最大连接数cat /proc/sys/fs/file-max是65535但是用lsof查到的连接数是10000多,完全没有达到连接数。
6)各项参数都正常,现在聚焦在打开的文件数这个问题上面。也可以用另外同一种方式查看一下内核统计文件 /proc/sys/fs/file-nr,比较一下差异,看看能不能找出问题。cat了一下,打开文件数是66080,果然超了!内核日志就以这个为标准。
但是看lsof怎么统计不出来,ll /proc/PID/fd也没几个。这个问题放在后面,先按照步骤echo 6553500 > /proc/sys/fs/file-max给连接数提高到100倍,CPU果然降了下来。原因确认了,但是必须找到根源,为什么忽然有这么大的打开文件数。关掉全部docker容器和docker引擎,打开文件数是少了一点,但是仍然在65535差不多。我就先排除一下业务的影响,把ECS3的nginx直接指向视频ECS2的apache,就等同于在ECS2上实现了ECS1的场景。查看一下ECS2的句柄数,才4000多,排除了业务相关应用对服务器的影响。那就能下个小结论,ECS1被神秘程序打开了6万多句柄数,打开业务就多了2000多的句柄数,然后就崩溃了。不过这个现象有点奇怪,ECS2和ECS1在一样的机房一样的配置一样的网络环境,一样的 *** 作系统,一样的服务,一样的容器,为什么一个有问题,一个没问题呢?不同的只是有一台是共享nfs。难道是静态文件共享了,其他人读了,也算是本服务器打开的?
7)现在程序找不到,没法继续lsof -p了。排查之前的猜想。带着排查得到对的结论往下想。
程序的bug和部署不当,那是不可能的,因为主要问题来自于打开句柄数,当部署到ECS2那里,一切正常。docker容器的bug,那也不可能的,每个都是我亲自写脚本,亲自编译,亲自构建的,关键是我关掉了docker容器和引擎都没有很大改善。网络攻击也排除,因为网络连接数没几个,流量也不变。那就只剩下病毒入侵也不是,没有异常进程。考虑到ECS的稳定性问题了。这方面就协助阿里云工程师去排查。
8)阿里云工程师用的排查手段和我差不多,最终也是没能看到什么。也只是给了我一些治标不治本的建议。后来上升到专家排查,专家直接在阿里云后端抓取了coredump文件分析打开的文件是,程序是nfsd。
好像印证了我刚才后面的猜想,应该就是ECS1使用了nfs共享其他服务器打开了然后算在ECS1头上。那问题又来了,我们的业务已经到达了可以影响服务器的程度吗?
9)既然问题解决到这一步,先不管程序有没有关闭打开的文件和nfs的配置。我们架构上面的应该是归nginx读取,难道是linux的内存机制让它缓存了。带着缓存的问题,首先去ECS3上释放内存echo 3 > /proc/sys/vm/drop_caches,释放之后,发现没什么改善,有点失落。总是觉得还有一台后端是PHP主导,但是逻辑上是写入,没有打开文件之说。后来从程序员中了解到,PHP也有打开。我猛然去ECS2释放一下内存,果然,句柄数降下来。(这里大家一定有个疑问,为什么我直接想到内存缓存而不是目前打开的文件呢。其一,这是生产环境,web前端只有一个,不能乱来停服务。其二,第一次遇到问题的时候,重启之后没有问题,过了一天之后积累到一定的程度才爆发,这里已经引导了我的思路是积累的问题,那就是缓存不断积累了)
10)因为ECS2的调用ECS1的nfs共享文件,所以lsof也有读不到那么多句柄数的理由。如果说是nfs的服务本身就有缓存,导致问题的话,我查看了配置文件,还是默认值允许缓存,30S过期,根本不会因为nfs的缓存造成打开文件过多。如果我们的后端程序打开之后没好好处理的话,那倒有可能。然后尝试排除:我改了ECS3的配置,使程序只读ECS1后端,从ECS1上面却看不到有什么异常表现,说明PHP程序已经好好处理了打开的文件。也不是docker挂载了nfs的共享的问题,因为nginx也有挂载。排查到这里也很大程度上解决问题,而且缓存了nfs的全部共享文件,句柄并没有增加,也算合理,所以就增加了打开文件数的限制。
11)现在排查的结果是跟后端和nfs共享有关。就是说,后端挂载了nfs的网络共享,被程序读取。而程序释放之后,在正常背景的硬盘文件是没有缓存的。但是在nfs挂载的环境下,缓存并没有得到释放。
12)总结:很多问题的排查和我们的猜想结果一样,但是有些例外的情况。比如这次我想到的原因都一一排除,但是问题也是在一步步排查中,逐步被发现的。
1在系统维护的过程中,随时可能有需要查看CPU使用率,并根据相应信息分析系统状况的需要。在CentOS中,可以通过top命令来查看CPU使用状况。运行top命令后,CPU使用状态会以全屏的方式显示,并且会处在对话的模式--用基于top的命令,可以控制显示方式等等。退出top的命令为q(在top运行中敲q键一次)。top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器 可以直接使用top命令后,查看%MEM的内容。可以选择按进程查看或者按用户查看,如想查看oracle用户的进程内存使用情况的话可以使用如下的命令: $top-uoracle2释义:PID:进程的ID USER:进程所有者 PR:进程的优先级别,越小越优先被执行 NInice:值 VIRT:进程占用的虚拟内存 RES:进程占用的物理内存 SHR:进程使用的共享内存 S:进程的状态。S表示休眠,R表示正在运行,Z表示僵死状态,N表示该进程优先值为负数 %CPU:进程占用CPU的使用率 %MEM:进程使用的物理内存和总内存的百分比 TIME+:该进程启动后占用的总的CPU时间,即占用CPU使用时间的累加值。 COMMAND:进程启动命令名称3 *** 作实例: 在命令行中输入“top” 即可启动top top的全屏对话模式可分为3部分:系统信息栏、命令输入栏、进程列表栏。 第一部分--最上部的系统信息栏: 第一行(top): “00:11:04”为系统当前时刻; “3:35”为系统启动后到现在的运作时间; “2users”为当前登录到系统的用户,更确切的说是登录到用户的终端数--同一个用户同一时间对系统多个终端的连接将被视为多个用户连接到系统,这里的用户数也将表现为终端的数目; “loadaverage”为当前系统负载的平均值,后面的三个值分别为1分钟前、5分钟前、15分钟前进程的平均数,一般的可以认为这个数值超过CPU数目时,CPU将比较吃力的负载当前系统所包含的进程; 第二行(Tasks): “59total”为当前系统进程总数; “1running”为当前运行中的进程数; “58sleeping”为当前处于等待状态中的进程数; “0stoped”为被停止的系统进程数; “0zombie”为被复原的进程数; 第三行(Cpus): 分别表示了CPU当前的使用率; 第四行(Mem): 分别表示了内存总量、当前使用量、空闲内存量、以及缓冲使用中的内存量; 第五行(Swap): 表示类别同第四行(Mem),但此处反映着交换分区(Swap)的使用情况。通常,交换分区(Swap)被频繁使用的情况,将被视作物理内存不足而造成的。 第二部分--中间部分的内部命令提示栏: top运行中可以通过top的内部命令对进程的显示方式进行控制。内部命令如下表: s -改变画面更新频率 l-关闭或开启第一部分第一行top信息的表示 t-关闭或开启第一部分第二行Tasks和第三行Cpus信息的表示 m-关闭或开启第一部分第四行Mem和第五行Swap信息的表示 N-以PID的大小的顺序排列表示进程列表(第三部分后述) P-以CPU占用率大小的顺序排列进程列表(第三部分后述) M-以内存占用率大小的顺序排列进程列表(第三部分后述) h-显示帮助 n-设置在进程列表所显示进程的数量 q-退出top s- 改变画面更新周期 第三部分--最下部分的进程列表栏: 以PID区分的进程列表将根据所设定的画面更新时间定期的更新。通过top内部命令可以控制此处的显示方式pmap可以根据进程查看进程相关信息占用的内存情况,(进程号可以通过ps查看)如下所示: $pmap-d5647ps 如下例所示: $ps-e-o'pid,comm,args,pcpu,rsz,vsz,stime,user,uid'其中rsz是是实际内存 $ps-e-o'pid,comm,args,pcpu,rsz,vsz,stime,user,uid'|greporacle|sort-nrk 其中rsz为实际内存,上例实现按内存排序,由大到小在Linux下查看内存我们一般用free命令:[root@scs-2tmp]#freetotalusedfreesharedbufferscachedMem:326618032500041617601106522668236-/+buffers/cache:4711162795064Swap:2048276801601968116下面是对这些数值的解释:total:总计物理内存的大小。used:已使用多大。free:可用有多少。Shared:多个进程共享的内存总额。Buffers/cached:磁盘缓存的大小。第三行(-/+buffers/cached):used:已使用多大。free:可用有多少。第四行就不多解释了。区别:第二行(mem)的used/free与第三行(-/+buffers/cache)used/free的区别。这两个的区别在于使用的角度来看,第一行是从OS的角度来看,因为对于OS,buffers/cached都是属于被使用,所以他的可用内存是16176KB,已用内存是3250004KB,其中包括,内核(OS)使用+Application(X,oracle,etc)使用的+buffers+cached第三行所指的是从应用程序角度来看,对于应用程序来说,buffers/cached是等于可用的,因为buffer/cached是为了提高文件读取的性能,当应用程序需在用到内存的时候,buffer/cached会很快地被回收。所以从应用程序的角度来说,可用内存=系统freememory+buffers+cached。如上例:2795064=16176+110652+2668236接下来解释什么时候内存会被交换,以及按什么方交换。当可用内存少于额定值的时候,就会开会进行交换。如何看额定值:cat/proc/meminfo[root@scs-2tmp]#cat/proc/meminfoMemTotal:3266180kBMemFree:17456kBBuffers:111328kBCached:2664024kBSwapCached:0kBActive:467236kBInactive:2644928kBHighTotal:0kBHighFree:0kBLowTotal:3266180kBLowFree:17456kBSwapTotal:2048276kBSwapFree:1968116kBDirty:8kBWriteback:0kBMapped:345360kBSlab:112344kBCommitted_AS:535292kBPageTables:2340kBVmallocTotal:536870911kBVmallocUsed:272696kBVmallocChunk:536598175kBHugePages_Total:0HugePages_Free:0Hugepagesize:2048kB用free-m查看的结果:[root@scs-2tmp]#free-mtotalusedfreesharedbufferscachedMem:318931731601072605-/+buffers/cache:4602729Swap:2000781921查看/proc/kcore文件的大小(内存镜像):[root@scs-2tmp]#ll-h/proc/kcore-r--------1rootroot41GJun1212:04/proc/kcore备注:占用内存的测量测量一个进程占用了多少内存,linux为我们提供了一个很方便的方法,/proc目录为我们提供了所有的信息,实际上top等工具也通过这里来获取相应的信息。/proc/meminfo机器的内存使用信息/proc/pid/mapspid为进程号,显示当前进程所占用的虚拟地址。/proc/pid/statm进程所占用的内存[root@localhost~]#cat/proc/self/statm6545744003340输出解释CPU以及CPU0。。。的每行的每个参数意思(以第一行为例)为:参数解释/proc//statusSize(pages)任务虚拟地址空间的大小VmSize/4Resident(pages)应用程序正在使用的物理内存的大小VmRSS/4Shared(pages)共享页数0Trs(pages)程序所拥有的可执行虚拟内存的大小VmExe/4Lrs(pages)被映像到任务的虚拟内存空间的库的大小VmLib/4Drs(pages)程序数据段和用户态的栈的大小(VmData+VmStk)4dt(pages)04查看机器可用内存/proc/28248/>freetotalusedfreesharedbufferscachedMem:1023788926400973880134668503688-/+buffers/cache:288044735744Swap:1959920896081870312我们通过free命令查看机器空闲内存时,会发现free的值很小。这主要是因为,在linux中有这么一种思想,内存不用白不用,因此它尽可能的cache和buffer一些数据,以方便下次使用。但实际上这些内存也是可以立刻拿来使用的。所以空闲内存=free+buffers+cached=total-usedtop命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器。下面详细介绍它的使用方法。top-02:53:32up16days,6:34,17users,loadaverage:024,021,024Tasks:481total,3running,474sleeping,0stopped,4zombieCpu(s):103%us,18%sy,00%ni,866%id,05%wa,02%hi,06%si,00%stMem:4042764ktotal,4001096kused,41668kfree,383536kbuffersSwap:2104472ktotal,7900kused,2096572kfree,1557040kcachedPIDUSERPRNIVIRTRESSHRS%CPU%MEMTIME+COMMAND32497jacky200669m222m31mR105629:2762firefox4788yiuwing200257m18m13mS5055:4244konsole5657Liuxiaof200585m159m30mS4405:2506firefox4455xiefc200542m124m30mR4317:2303firefox6188Liuxiaof200191m17m13mS4050:0116konsole统计信息区前五行是系统整体的统计信息。第一行是任务队列信息,同uptime命令的执行结果。其内容如下:01:06:48当前时间up1:22系统运行时间,格式为时:分1user当前登录用户数loadaverage:006,060,048系统负载,即任务队列的平均长度。三个数值分别为1分钟、5分钟、15分钟前到现在的平均值。第二、三行为进程和CPU的信息。当有多个CPU时,这些内容可能会超过两行。内容如下:Tasks:29total进程总数1running正在运行的进程数28sleeping睡眠的进程数0stopped停止的进程数0zombie僵尸进程数Cpu(s):03%us用户空间占用CPU百分比10%sy内核空间占用CPU百分比00%ni用户进程空间内改变过优先级的进程占用CPU百分比987%id空闲CPU百分比00%wa等待输入输出的CPU时间百分比00%hi00%si最后两行为内存信息。内容如下:Mem:191272ktotal物理内存总量173656kused使用的物理内存总量17616kfree空闲内存总量22052kbuffers用作内核缓存的内存量Swap:192772ktotal交换区总量0kused使用的交换区总量192772kfree空闲交换区总量123988kcached缓冲的交换区总量。内存中的内容被换出到交换区,而后又被换入到内存,但使用过的交换区尚未被覆盖,该数值即为这些内容已存在于内存中的交换区的大小。相应的内存再次被换出时可不必再对交换区写入。进程信息区统计信息区域的下方显示了各个进程的详细信息。首先来认识一下各列的含义。序号列名含义aPID进程idbPPID父进程idcRUSERRealusernamedUID进程所有者的用户ideUSER进程所有者的用户名fGROUP进程所有者的组名gTTY启动进程的终端名。不是从终端启动的进程则显示为hPR优先级iNInice值。负值表示高优先级,正值表示低优先级jP最后使用的CPU,仅在多CPU环境下有意义k%CPU上次更新到现在的CPU时间占用百分比lTIME进程使用的CPU时间总计,单位秒mTIME+进程使用的CPU时间总计,单位1/100秒n%MEM进程使用的物理内存百分比oVIRT进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RESpSWAP进程使用的虚拟内存中,被换出的大小,单位kb。qRES进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATArCODE可执行代码占用的物理内存大小,单位kbsDATA可执行代码以外的部分(数据段+栈)占用的物理内存大小,单位kbtSHR共享内存大小,单位kbunFLT页面错误次数vnDRT最后一次写入到现在,被修改过的页面数。wS进程状态。D=不可中断的睡眠状态R=运行S=睡眠T=跟踪/停止Z=僵尸进程xCOMMAND命令名/命令行yWCHAN若该进程在睡眠,则显示睡眠中的系统函数名zFlags任务标志,参考schedh默认情况下仅显示比较重要的PID、USER、PR、NI、VIRT、RES、SHR、S、%CPU、%MEM、TIME+、COMMAND列。可以通过下面的快捷键来更改显示内容。更改显示内容通过f键可以选择显示的内容。按f键之后会显示列的列表,按a-z即可显示或隐藏对应的列,最后按回车键确定。按o键可以改变列的显示顺序。按小写的a-z可以将相应的列向右移动,而大写的A-Z可以将相应的列向左移动。最后按回车键确定。按大写的F或O键,然后按a-z可以将进程按照相应的列进行排序。而大写的R键可以将当前的排序倒转。==============================top命令使用过程中,还可以使用一些交互的命令来完成其它参数的功能。这些命令是通过快捷键启动的。<空格>:立刻刷新。P:根据CPU使用大小进行排序。T:根据时间、累计时间排序。q:退出top命令。m:切换显示内存信息。t:切换显示进程和CPU状态信息。c:切换显示命令名称和完整命令行。M:根据使用内存大小进行排序。W:将当前设置写入~/toprc文件中。这是写top配置文件的推荐方法。可以看到,top命令是一个功能十分强大的监控系统的工具,对于系统管理员而言尤其重要。但是,它的缺点是会消耗很多系统资源。应用实例使用top命令可以监视指定用户,缺省情况是监视所有用户的进程。如果想查看指定用户的情况,在终端中按“U”键,然后输入用户名,系统就会切换为指定用户的进程运行界面。a作用free命令用来显示内存的使用情况,使用权限是所有用户。b格式free[-b -k -m][-o][-sdelay][-t][-V]c主要参数-b-k-m:分别以字节(KB、MB)为单位显示内存使用情况。-sdelay:显示每隔多少秒数来显示一次内存使用情况。-t:显示内存总和列。-o:不显示缓冲区调节列。d应用实例free命令是用来查看内存使用情况的主要命令。和top命令相比,它的优点是使用简单,并且只占用很少的系统资源。通过-S参数可以使用free命令不间断地监视有多少内存在使用,这样可以把它当作一个方便实时监控器。#free-b-s5使用这个命令后终端会连续不断地报告内存使用情况(以字节为单位),每5秒更新一次。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)