最近经常收到告警,CPU load大于阈值告警。查看系统的CPU是12核,告警阈值设置的是8。对于CPU load一直有个模糊的概念,具体是什么意思还真搞不明白,趁这个机会好好搞搞究竟。

1.查看CPU load

查看CPU load的方法很多,我经常用个最简单的命令:uptime

[linux@b28-34-98 ~]$ uptime
16:09:32 up 530 days, 1 min, 1 user, load average: 2.71, 2.44, 1.99

命令结果的后三位就是load的值了,分别代表1分钟、5分钟、15分钟的平均值。因为是平均值,15分钟更能代表系统的整体负载情况,如果1分钟的值很高,其他两个值很低,只能说明系统有瞬间的高负载。如果15分钟内,系统的平均负载都很大,表明问题持续存在,不是暂时现象。那么CPU load这个值多少算大呢,和CPU核数又有什么关系呢?

2.CPU load含义

CPU load是一段时间内CPU正在处理以及等待CPU处理的进程数之和的统计信息。

2.1单核CPU

当CPU完全空闲的时候,平均负荷为0(即load average的值为0);当CPU工作量饱和的时候,平均负荷为1;当有线程等待时,平均负荷为等待线程数+1,如果这个时候等待线程过多,等待时间就会长,需要考虑增加CPU 了。

来个经典比喻:

不妨把这个CPU想象成一座大桥,桥上只有一根车道,所有车辆都必须从这根车道上通过(很显然,这座桥只能单向通行),大桥的通行能力(一次10辆车),就是CPU的最大工作量;桥梁上的车辆,就是一个个等待CPU处理的进程(process)。

1)系统负荷为0,意味着大桥上一辆车也没有。

2)系统负荷为0.5,意味着大桥一半的路段有车。

3)系统负荷为1.0,意味着大桥的所有路段都有车,也就是说大桥已经"满"了。但是必须注意的是,直到此时大桥还是能顺畅通行的。

4)系统负荷为1.7,意味着车辆太多了,大桥已经被占满了(100%),后面等着上桥的车辆为桥面车辆的70%。

以此类推,系统负荷2.0,意味着等待上桥的车辆与桥面的车辆一样多; 系统负荷3.0,意味着等待上桥的车辆是桥面车辆的2倍。 总之,当系统负荷大于1,后面的车辆就必须等待了;系统负荷越大,过桥就必须等得越久。 CPU的系统负荷,基本上等同于上面的类比。为了服务器顺畅运行,系统负荷最好不要超过1.0,这样就没有进程需要等待了,所有进程都能第一时间得到处理。 很显然,1.0是一个关键值,超过这个值,系统就不在最佳状态了,就需要动手干预了。

2.2多核CPU

当CPU核数是4时,系统的处理能力是单核CPU的4倍,这时候CPU工作量饱和时,平均负荷为4,即每个CPU正在处理一个负荷。

类比到这个小车过桥的比喻中,4核CPU相当于4车道大桥。

1)系统负荷为0,意味着大桥上一辆车也没有。

2)系统负荷为1.0,意味着大桥只有一条车道占满,其他车道空闲着,其实也不一定所有车辆挤一条车道上,可以平均分配到不同车道,每条车道负载0.25。

3)系统负荷为4,意味着大桥的4条路段都有车,也就是说大桥已经"满"了。但是必须注意的是,直到此时大桥还是能顺畅通行的。

4)系统负荷大于4,意味着车辆太多了,大桥已经被占满了(100%),后面已经有等着上桥的车辆了。

3.CPU load多大合适

这个仁者见仁,有人觉得CPU负载小于等于"内核数乘以0.5-0.7"算是一种理想状态。 比如4核CPU的服务器,理想负载是小于等于2,最好不要超过2.8,否则性能多少会受影响。个人感觉这个要具体情况具体分析,在监控中设置成CPU核数即可,当然如果长时间观察到CPU load饱满运行,就需要多加注意了。

什么是CPU load的更多相关文章

  1. Linux内核分析:页回收导致的cpu load瞬间飙高的问题分析与思考--------------蘑菇街技术博客

    http://mogu.io/156-156 摘要 本文一是为了讨论在Linux系统出现问题时我们能够借助哪些工具去协助分析,二是讨论出现问题时大致的可能点以及思路,三是希望能给应用层开发团队介绍一些 ...

  2. linux loadavg详解(top cpu load)

    目录 [隐藏] 1 Loadavg分析 1.1 Loadavg浅述 1.2 Loadavg读取 1.3 Loadavg和进程之间的关系 1.4 Loadavg采样 2 18内核计算loadavg存在的 ...

  3. CPU利用率和CPU负荷(CPU usage vs CPU load)

    对于CPU的性能监测,通常用top指令能显示出两个指标:cpu 利用率和cpu负荷. 其中%Cpu相关的内容: us表示用户进程cpu利用率,sy表示系统内核进程cpu利用率,ni表示运行正常进程消耗 ...

  4. 浅谈cpu.idle和cpu.load

    1.概述 大家经常对一个系统的容量进行评估时,会参考cpu.idle和cpu.load指标,但是这两个指标到底在什么区间,表示系统是正常或者异常呢,业内有不同的说法.因此本文搜集一些资料,并对一个系统 ...

  5. cpu load过高问题排查

    load average的概念 top命令中load average显示的是最近1分钟.5分钟和15分钟的系统平均负载. 系统平均负载被定义为在特定时间间隔内运行队列中(在CPU上运行或者等待运行多少 ...

  6. CPU load高而使用率低的问题分析

    最近服务器上出现了一个很诡异的问题,症状如下图所示: 查看进程发现: 如上图所示,非常多的df -h进程没有退出.于是手工kill掉这些 df -h进程.cpu load恢复正常. 至于为什么会有这么 ...

  7. 理解linux cpu load - 什么时候应该担心了

    译文原文: http://blog.scoutapp.com/articles/2009/07/31/understanding-load-averages 你可能已经很熟悉linux的平均load. ...

  8. Linux CPU Load Average

    理解Linux系统负荷 LINUX下CPU Load Average的一点研究 Linux load average负载量分析与解决思路 Understanding Linux CPU Load - ...

  9. LINUX下CPU Load Average的一点研究

    背景: 公司的某个系统工作在基于Linux的Cent OS下,一个host下同时连接了许多client, 最近某台Host总是显示CPU Load Average过高,我们单纯的以为是CPU的占用过高 ...

  10. 【操作系统之十一】任务队列、CPU Load、指令乱序、指令屏障

    一.CPU Loadcpu load是对使用或者等待cpu进程的统计(数量的累加):每一个使用(running)或者等待(runnable)CPU的进程,都会使load值+1;每一个结束的进程,都会使 ...

随机推荐

  1. C++走向远洋——23(项目一,三角形,类)

    */ * Copyright (c) 2016,烟台大学计算机与控制工程学院 * All rights reserved. * 文件名:sanjiaoxing.cpp * 作者:常轩 * 微信公众号: ...

  2. Day 1 模拟

    1. P1088 火星人 利用STL中的next_permutation();函数求一种排列的下一种排列,循环m次即为答案.(STL大法好~~C++是世界上最好的语言~~逃 #include < ...

  3. 爬虫(二)requests 登陆某检索网站

    1 import requests import os from PIL import Image import pytesseract import re rootUrl = xxx # 构建登录页 ...

  4. 浅谈C# Dictionary实现原理

    使用C#已经有好多年头了,然后突然有一天被问到C#Dictionary的基本实现,这让我反思到我一直处于拿来主义,能用就好,根本没有去考虑和学习一些底层架构,想想令人头皮发麻.下面开始学习一些我平时用 ...

  5. 用jQuery怎么做到前后端分离

    传统的web开发模式想必大家都知道,不管是jsp.asp.php或者一些魔板引擎开发,其实道理都是一样的,都是服务端渲染,原理是:浏览器发送一个get请求,服务器对应的返回前端一个html页面,由浏览 ...

  6. php+mysql开发一个最简单的在线题库,在线做题系统!

    题库,对于教育机构,学校,在线教育,是很有必要的,网上也有不少的第三方在线题库系统,但是本次案例,会让有需要的人了解题库的开发思路,其实很简单,无非就是一个表单验证,数据库验证. 1.先构建表单数据2 ...

  7. Asp.Net Core IdentityServer4 中的基本概念

    一.前言 这篇文章可能大家会觉得很空洞,没有实际的实战东西,主要是自己整理出来的IdentityServer4 的一些概念性的东西:如果你对IdentityServer4有过一定的实战经验,可以跳过不 ...

  8. python基本数据类型的操作

    1 列表和元组 1.列表基本操作 1. 列表赋值 a = [1,2,3,4,5,6,7,8] a[0] = 100 #the result : [100, 2, 3, 4, 5, 6, 7, 8] 2 ...

  9. java多线程基础API

    本次内容主要讲认识Java中的多线程.线程的启动与中止.yield()和join.线程优先级和守护线程. 1.Java程序天生就是多线程的 一个Java程序从main()方法开始执行,然后按照既定的代 ...

  10. .Net Core项目中整合Serilog

    前言:Serilog是.NET应用程序的诊断日志记录库.它易于设置,具有简洁的API,并且可以在所有最新的.NET平台上运行.尽管即使在最简单的应用程序中它也很有用,但当对复杂的,分布式的和异步的应用 ...