一、CPU利用率和负载率的区别这里要区别CPU负载和CPU利用率,它们是差别的两个概念,但它们的信息可以在同一个top命令中举行显示。CPU利用率显示的是程序在运行期间实时占用的CPU百分比,这是对一个时间段内CPU利用状态的统计,通过这个指标可以看出在某一个时间段内CPU被占用的情况, 假如被占用时间很高,那么就必要考虑CPU是否已经处于超负荷运作。而CPU负载显示的是在一段时间内CPU正在处理以及等候CPU处理的进程数之和的统计信息,也就是CPU利用队列的长度的统计信息。 CPU利用率高并不意味着负载就一定大,大概这个任务是一个CPU密集型的。一样CPU低利用率的情况下是否会有高Load Average的情况产生呢?明白占有时间和利用时间就可以知道,当CPU分配时间片以后,是否利用完全取决于利用者,因此完全大概出现低利用率高Load Average的情况。另外IO设备也大概导致CPU负载高。 由此来看,仅仅从CPU的利用率来判断CPU是否处于一种超负荷的工作状态照旧不够的,必须联合Load Average来全局的看CPU的利用情况。网上有个例子来说明两者的区别如下:某公用电话亭,有一个人在打电话,四个人在等候,每人限定利用电话一分钟,如有人一分钟之内没有打完电话,只能挂掉电话去列队,等候下一轮。电话在这里就相当于CPU,而正在或等候打电话的人就相当于任务数。在电话亭利用过程中,肯定会有人打完电话走掉,有人没有打完电话而选择重新列队,更会有新增的人在这儿列队,这个人数的变化就相当于任务数的增减。为了统计平均负载情况,我们5秒钟统计一次人数,并在第1、5、15分钟的时候对统计情况取平均值,从而形成第1、5、15分钟的平均负载。有的人拿起电话就打,不停打完1分钟,而有的人大概前三十秒在找电话号码,或者在犹豫要不要打,后三十秒才真正在打电话。假如把电话看作CPU,人数看作任务,我们就说前一个人(任务)的CPU利用率高,后一个人(任务)的CPU利用率低。固然, CPU并不会在前三十秒工作,后三十秒歇着,CPU是不停在工作。只是说,有的程序涉及到大量的盘算,以是CPU利用率就高,而有的程序扳连到盘算的部分很少,CPU利用率天然就低。但无论CPU的利用率是高是低,跟背面有多少任务在列队没有必然关系。 CPU数量和CPU核心数(即内核数)都会影响到CPU负载,因为任务最终是要分配到CPU核心去处理的。两块CPU要比一块CPU好,双核要比单核好。因此,我们必要记住,除去CPU性能上的差异,CPU负载是基于内核数来盘算的,即“有多少内核,即有多少负载”,如单核最好不要高出100%,也就是负载为1.00,如此类推。 Linux里有一个/proc目次,存放的是当前运行系统的假造映射,其中有一个文件为cpuinfo,这个文件里存放着CPU的信息。/proc/cpuinfo文件按逻辑CPU而非真实CPU分段落显示信息,每个逻辑CPU的信息占用一个段落,第一个逻辑CPU标识从0开始。 [code] $ cat /proc/cpuinfo processor : 0 vendor_id : GenuineIntel cpu family : 6 model : 63 model name : Intel(R) Xeon(R) CPU E5-2630 v3 @ 2.40GHz stepping : 2 microcode : 0x36 cpu MHz : 2399.998 cache size : 20480 KB physical id : 0 siblings : 2 core id : 0 cpu cores : 2 apicid : 0 initial apicid : 0 fpu : yes fpu_exception : yes cpuid level : 15 wp : yes flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr ...... bogomips : 4799.99 clflush size : 64 cache_alignment : 64 address sizes : 42 bits physical, 48 bits virtual power management:[/code]要明白该文件中的CPU信息,有几个相干的概念要知道,如:processor表示逻辑CPU的标识、model name表示真实CPU的型号信息、physical id表示真实CPU和标识、cpu cores表示真实CPU的内核数等等。 逻辑CPU的描述:如今的服务器一般都利用了“超线程”(Hyper-Threading,简称HT)技术来进步CPU的性能。超线程技术是在一颗CPU同时执行多个程序而共同分享一颗CPU内的资源,理论上要像两颗CPU一样在同一时间执行两个线程。固然采用超线程技术能同时执行两个线程,但它并不象两个真正的CPU那样,每各CPU都具有独立的资源。当两个线程都同时必要某一个资源时,其中一个要暂时停止,并让出资源,直到这些资源闲置后才能继续。因此超线程的性能并不等于两颗CPU的性能。具有超线程技术的CPU另有一些别的方面的限制。 二、CPU负载率的盘算方式Load average的概念源自UNIX系统,固然各家的公式不尽类似,但都是用于权衡正在利用CPU的举行数量和正在等候CPU的进程数量,一句话就是runable processes的数量。以是Load average可以作为CPU瓶颈的参考指标,假如大于CPU的数量,说明CPU大概不够用了。 但是,在Linux上有点差异! Linux上的load average除了包罗正在利用CPU的进程数量和正在等候CPU的进程数量之外,还包罗uninterruptible sleep的进程数量。通常等候IO设备、等候网络的时候,进程会处于uninterruptible sleep状态。Linux计划者的逻辑是,uninterruptible sleep应该都是很短暂的,很快就会恢复运行,以是被等同于runnable。然而uninterruptible sleep纵然再短暂也是sleep,况且现实天下中uninterruptible sleep未必很短暂,大量的、或长时间的uninterruptible sleep通常意味着IO设备遇到了瓶颈。众所周知,sleep状态的进程是不必要CPU的,纵然所有的CPU都空闲,正在sleep的进程也是运行不了的,以是sleep进程的数量绝对不适适用作权衡CPU负载的指标,Linux把uninterruptible sleep进程算进load average的做法直接颠覆了load average的本来意义。以是在Linux系统上,load average这个指标根本失去了作用,因为你不知道它代表什么意思,当看到load average很高的时候,你不知道是runnable进程太多照旧uninterruptible sleep进程太多,也就无法判断是CPU不够用照旧IO设备有瓶颈。 从另一个方面来说,也就可以解释为什么磁盘慢时(大量磁盘利用时),CPU负载会飙高了。根本上我遇到CPU负载高的情况就两种情况:CPU自己处理太多任务,再加上软中断和上下文切换太频繁导致负载高;再就是磁盘太慢导致了不可中断就寝太多导致CPU负载高。 以上就是本文关于浅谈为什么磁盘慢会导致Linux负载飙升的全部内容,希望对各人有所帮助。感爱好的朋友可以继续参阅本站其他相干专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持! 来源:https://www.jb51.net/LINUXjishu/598567.html 免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |
|手机版|小黑屋|梦想之都-俊月星空
( 粤ICP备18056059号 )|网站地图
GMT+8, 2025-7-1 19:39 , Processed in 0.042963 second(s), 19 queries .
Powered by Mxzdjyxk! X3.5
© 2001-2025 Discuz! Team.