当前位置: 首页 > news >正文

系统负载:如何判断Linux load的值是否过高

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

接触过和使用过unix或linux的朋友,都知道如何查看Unix/Linux load的值,这边我也重复一下查看load的方法:

[root@aaronw ~]# uptime
13:33:37 up 7 days, 1:52, 1 user, load average: 4.15, 2.00, 3.14
[root@aaronw ~]# w
13:35:35 up 1 days, 1:54, 1 user, load average: 0.00, 0.00, 0.00
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/1 192.168.2.2 13:33 0.00s 0.02s 0.00s w

load average 后面三个值代表系统在1分钟、5分钟和15分钟的负载情况,都知道数字越高表示系统负载越大,第一直觉就是这个系统不行了。load average 是0的时候都认为他很低,10的时候就觉得高,20就不用讲了!但是除了这两种极端的情况之外,那什么时候是这两个值的临界点?当别人问起我这个问题的时 候,我也不知道如何回答,在我大脑里就根本就没有考虑过。困扰了我很久,我觉得要搞明白他!

先从linux的kernel的源码开始吧!在linux 2.6.36版本中有这样一段代码:

/**
* spu_calc_load – update the avenrun load estimates.
*
* No locking against reading these values from userspace, as for
* the CPU loadavg code.
*/
static void spu_calc_load(void)
{
unsigned long active_tasks; /* fixed-point */
 
active_tasks = count_active_contexts() * FIXED_1;
CALC_LOAD(spu_avenrun[0], EXP_1, active_tasks);
CALC_LOAD(spu_avenrun[1], EXP_5, active_tasks);
CALC_LOAD(spu_avenrun[2], EXP_15, active_tasks);
}

CALC_LOAD是这样定义:

#define LOAD_FREQ (5*HZ+1) /* 5 sec intervals */
#define EXP_1 1884 /* 1/exp(5sec/1min) as fixed-point */
#define EXP_5 2014 /* 1/exp(5sec/5min) */
#define EXP_15 2037 /* 1/exp(5sec/15min) */#define CALC_LOAD(load,exp,n) \
load *= exp; \
load += n*(FIXED_1-exp); \
load >>= FSHIFT;

从这里我们能看到取负载值的最小周期5秒,根据代码中定义我们知道

什么是load?

load的就是一定时间内计算机有多少个active_tasks,也就是说是计算机的任务执行队列的长度,cpu计算的队列。

load多少是正常?

既然load是cpu计算的队列,那就应该和cpu个处理方式和cpu的个数有关系。所以我个人认为应该按系统识别的cpu个数来确定load的临界值,系统识别为8个cpu,那么load为8就是临界点,高于8就属于over load了。

什么叫系统识别cpu个数?

我是这样认为的,这里涉及到cpu物理个数和超线程技术的问题。个人认为4个物理cpu和2个双核是不能够等同的,当然这是物理层面的事了!在系统里识别的都是4个CPU.所以应该要以系统识别的为准。毕竟是系统去支配他的使用。

CPU高不等同于load高

在Unix/Linux可能经常会遇到cpu的使用率为100%,但是load却不高!这是为什么呢?因为几乎所有的任务和会和CPU进行交互,但 是由于各个设备的使用频率不同,造成了不能同步进行的问题。比如说,当对硬盘进行读写的时候,出现IO的等待时候,事实上cpu已经被切换到别的进程上 了。该任务就处于等待状态,当这样的任务过多,导致队列长度过大,这样就体现到负载过大了,但实际是此时cpu被分配去干执行别的任务或空闲,因此CPU 高不等同于load高,load高也不能于cpu高。

转载于:https://my.oschina.net/snowing1990/blog/729691

相关文章:

  • 数据操作类 SQLHelper.cs
  • 命令 man shutdow reboot halt poweroff date hwclock cd pwd mkdir rmdir
  • Python语言学习 (四)1.1
  • Kubernetes监控——Heapster+InfluxDB+Grafana
  • RAC3——RAC原理开始
  • 一个Delphi的资源编辑器(支持SDK菜单资源编辑)
  • mysql备份还原
  • 静态默认路由 可以在网络边缘通过一个路由器端口访问每一个pc机
  • UWP WebView 禁用缩放
  • MFC 文件操作
  • 商朝子的破解教学第一章
  • Mybatis的连接池
  • Gvr SDK for Unity 分析(二)
  • sqlite编译
  • expect在需要交互脚本中的简单应用
  • [js高手之路]搞清楚面向对象,必须要理解对象在创建过程中的内存表示
  • Docker 1.12实践:Docker Service、Stack与分布式应用捆绑包
  • Elasticsearch 参考指南(升级前重新索引)
  • express如何解决request entity too large问题
  • Java 最常见的 200+ 面试题:面试必备
  • ReactNativeweexDeviceOne对比
  • Sass 快速入门教程
  • vue-cli在webpack的配置文件探究
  • 排序算法之--选择排序
  • 在Docker Swarm上部署Apache Storm:第1部分
  • [Shell 脚本] 备份网站文件至OSS服务(纯shell脚本无sdk) ...
  • Nginx实现动静分离
  • 微龛半导体获数千万Pre-A轮融资,投资方为国中创投 ...
  • #Linux(帮助手册)
  • #每天一道面试题# 什么是MySQL的回表查询
  • (1)(1.13) SiK无线电高级配置(五)
  • (delphi11最新学习资料) Object Pascal 学习笔记---第8章第5节(封闭类和Final方法)
  • (html转换)StringEscapeUtils类的转义与反转义方法
  • (pojstep1.1.1)poj 1298(直叙式模拟)
  • (Python) SOAP Web Service (HTTP POST)
  • (zz)子曾经曰过:先有司,赦小过,举贤才
  • (二)Eureka服务搭建,服务注册,服务发现
  • (十) 初识 Docker file
  • (一)Thymeleaf用法——Thymeleaf简介
  • .net 8 发布了,试下微软最近强推的MAUI
  • .net core IResultFilter 的 OnResultExecuted和OnResultExecuting的区别
  • .Net Core缓存组件(MemoryCache)源码解析
  • .net 调用php,php 调用.net com组件 --
  • .NET 发展历程
  • .net 获取url的方法
  • .netcore 如何获取系统中所有session_如何把百度推广中获取的线索(基木鱼,电话,百度商桥等)同步到企业微信或者企业CRM等企业营销系统中...
  • .net反混淆脱壳工具de4dot的使用
  • .NET框架类在ASP.NET中的使用(2) ——QA
  • .NET企业级应用架构设计系列之技术选型
  • .net生成的类,跨工程调用显示注释
  • ??如何把JavaScript脚本中的参数传到java代码段中
  • [20170713] 无法访问SQL Server
  • [ACM] hdu 1201 18岁生日
  • [BUG] Hadoop-3.3.4集群yarn管理页面子队列不显示任务
  • [CSS]中子元素在父元素中居中