一、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开始。

$ 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:

要理解该文件中的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负载高。

原文来自:http://linuxperf.com/?p=176

转载于:https://www.cnblogs.com/chenjinxi/p/9511278.html

为什么磁盘慢会导致Linux负载飙升?相关推荐

  1. nas磁盘无法连接导致主机负载高

    某重点客户新购买一套ODA,还在做迁移计划,今早7点多收到告警,机器负载超过300了,有点疯,还没有业务就这样?等上班了再看吧 使用top也没有看出消耗cpu或者内存大的进程 直接df -h命令查看时 ...

  2. mysql负载突然飙升_hugepages使用出现kswapd导致系统负载突然上升

    在运行Oracle 数据库的linux 服务器上,某个时间段的每分钟负载会突然上升到40 以上,在进程队列里看到kswapd0 出现,导致数据库 在运行Oracle 数据库的linux 服务器上,某个 ...

  3. linux负载很高是什么原因导致的?

    这里要区别CPU负载和CPU利用率,它们是不同的两个概念,但它们的信息可以在同一个top命令中进行显示.CPU利用率显示的是程序在运行期间实时占用的CPU百分比,这是对一个时间段内CPU使用状况的统计 ...

  4. linux内存96后无法连接,linux服务器因磁盘空间满导致oracle数据库无法连接问题探索...

    记录一下程序连不上库问题解决过程: 此前没接触过linux,所以过程比较繁琐 首先我部署在linux服务器上的项目莫名其妙连不上oracle库了,用plsql连接报这个: 然后我就上putty,ssh ...

  5. 拉手网php面试题,拉手网_php-fpm负载飙升解决实战

    2014年10月份拉手网wap服务器(m.lashou.com)发生过一次莫名其妙的服务器负载飙升事件(那时的业务量也比较大),以前大体记录了解决过程,现在再整理下为遇到此种问题的人提供下思路,同时也 ...

  6. Linux系列教程——1 Linux磁盘管理、2 Linux进程管理、3 Linux系统服务、 4 Linux计划任务

    文章目录 1 Linux磁盘管理 1.磁盘的基本概念 1.什么是磁盘 2.磁盘的基本结构 3.磁盘的预备知识 1.磁盘的接口类型 2.磁盘的基本术语 3.磁盘在系统上的命名方式 4.磁盘基本分区Fdi ...

  7. linux负载均衡(什么是负载均衡)

    linux负载均衡(什么是负载均衡) 一.总结 一句话总结: 建立在现有网络结构之上,它提供了一种廉价有效透明的方法扩展网络设备和服务器的带宽.增加吞吐量.加强网络数据处理能力.提高网络的灵活性和可用 ...

  8. 注意!Linux glibc再曝漏洞,可导致Linux软件劫持

    2019独角兽企业重金招聘Python工程师标准>>> glibc是GNU发布的libc库,即c运行库.它是Linux系统中最底层的API,几乎其它运行库都会依赖于glibc. 近日 ...

  9. 一次服务器磁盘空间不足导致的一系列问题

    继昨天服务器上应用 CPU占用过高 后面该应用宕掉了以后       java 一次CPU占用过高问题的排查及解决 今天又出现了更严重的问题     昨天解决完问题  今天早些时候 出现了系统无法登录 ...

  10. 写磁盘太慢导致服务超时问题分析

    服务逻辑: 接收客户端的请求参数,写文件到本地磁盘 问题发现: 客户端报超时, 每天日志理论上是有几万条的,但是近几天只收到了几条 问题分析: 其实最开始的时候,以为是服务端处理不过来导致的,因为最开 ...

最新文章

  1. JAVA中的Font
  2. linux 老文件自动删除,Linux计划任务之自动删除n天前的旧文件
  3. 转《浅谈数据库设计技巧》
  4. 04 | 负载均衡:Ribbon 如何保证微服务的高可用
  5. ci 地址去掉index.php,CI框架如何删除地址栏的 index.php
  6. 化工图纸中LISP_必备干货丨石油化工安装工程质量与成本控制研究
  7. oracle 中查找不连续的数的最前一个值
  8. 不是外部命令也不是可运行程序_手机运行内存4G和6G有什么不同?差别不是一般大...
  9. UGUI LongText
  10. 24点游戏算法python_24点游戏算法
  11. 软件架构--工业软件架构分析
  12. cocos游戏FlyBird
  13. 线性表的链式存储结构 ( 链表 )
  14. 6713芯片手册_tms320c6713 gpio_tms320c6713_dsp6713中文手册
  15. 安洵信息渗透工程师面试经验分享
  16. ecu故障现象_发动机各传感器故障现象总结
  17. 一文读懂什么是MRO采购
  18. 如何利用领英快速开发客户?
  19. Spring BackOff退避算法(一)
  20. outlook打开总是要输入密码,怎么办?

热门文章

  1. 第 8 章 crontab
  2. 三大技术要素为互联网金融2.0保驾护航
  3. PHP实现菱形与杨辉三角形【php趣味案例】
  4. Linux网络编程基础
  5. 《IT项目管理》读书笔记(1) —— 概述
  6. WCF分布式开发常见错误解决(1):添加服务引用出错
  7. Leetcode142. Linked List Cycle II环形链表2
  8. 网站禁止复制类型的属性
  9. hihocoder 1186
  10. Python之认识世界