CPU时间片
为了提高程序执行效率,大家在很多应用中都采用了多线程模式,这样可以将原来的序列化执行变为并行执行,任务的分解以及并行执行能够极大地提高程序的运行效率。但这都是代码级别的表现,而硬件是如何支持的呢?那就要靠CPU的时间片模式来说明这一切。程序的任何指令的执行往往都会要竞争CPU这个最宝贵的资源,不论你的程序分成了多少个线程去执行不同的任务,他们都必须排队等待获取这个资源来计算和处理命令。先看看单CPU的情况。下面两图描述了时间片模式和非时间片模式下的线程执行的情况:
图 1 非时间片线程执行情况
图 2 非时间片线程执行情况
在图一中可以看到,任何线程如果都排队等待CPU资源的获取,那么所谓的多线程就没有任何实际意义。图二中的CPU Manager只是我虚拟的一个角色,由它来分配和管理CPU的使用状况,此时多线程将会在运行过程中都有机会得到CPU资源,也真正实现了在单CPU的情况下实现多线程并行处理。
多CPU的情况只是单CPU的扩展,当所有的CPU都满负荷运作的时候,就会对每一个CPU采用时间片的方式来提高效率。
在Linux的内核处理过程中,每一个进程默认会有一个固定的时间片来执行命令(默认为1/100秒),这段时间内进程被分配到CPU,然后独占使用。如果使用完,同时未到时间片的规定时间,那么就主动放弃CPU的占用,如果到时间片尚未完成工作,那么CPU的使用权也会被收回,进程将会被中断挂起等待下一个时间片。
CPU利用率和Load Average的区别
压力测试不仅需要对业务场景的并发用户等压力参数作模拟,同时也需要在压力测试过程中随时关注机器的性能情况,来确保压力测试的有效性。当服务器长期处于一种超负荷的情况下运行,所能接收的压力并不是我们所认为的可接受的压力。就好比项目经理在给一个人估工作量的时候,每天都让这个人工作12个小时,那么所制定的项目计划就不是一个合理的计划,那个人迟早会垮掉,而影响整体的项目进度。
CPU利用率在过去常常被我们这些外行认为是判断机器是否已经到了满负荷的一个标准,看到50%-60%的使用率就认为机器就已经压到了临界了。CPU利用率,顾名思义就是对于CPU的使用状况,这是对一个时间段内CPU使用状况的统计,通过这个指标可以看出在某一个时间段内CPU被占用的情况,如果被占用时间很高,那么就需要考虑CPU是否已经处于超负荷运作,长期超负荷运作对于机器本身来说是一种损害,因此必须将CPU的利用率控制在一定的比例下,以保证机器的正常运作。
Load Average是CPU的Load,它所包含的信息不是CPU的使用率状况,而是在一段时间内CPU正在处理以及等待CPU处理的进程数之和的统计信息,也就是CPU使用队列的长度的统计信息。为什么要统计这个信息,这个信息的对于压力测试的影响究竟是怎么样的,那就通过一个类比来解释CPU利用率和Load Average的区别以及对于压力测试的指导意义。
我们将CPU就类比为电话亭,每一个进程都是一个需要打电话的人。现在一共有4个电话亭(就好比我们的机器有4核),有10个人需要打电话。现在使用电话的规则是管理员会按照顺序给每一个人轮流分配1分钟的使用电话时间,如果使用者在1分钟内使用完毕,那么可以立刻将电话使用权返还给管理员,如果到了1分钟电话使用者还没有使用完毕,那么需要重新排队,等待再次分配使用。
图 3 电话使用场景
上图中对于使用电话的用户又作了一次分类,1min的代表这些使用者占用电话时间小于等于1min,2min表示使用者占用电话时间小于等于2min,以此类推。根据电话使用规则,1min的用户只需要得到一次分配即可完成通话,而其他两类用户需要排队两次到三次。
电话的利用率 = sum (active use cpu time)/period
每一个分配到电话的使用者使用电话时间的总和去除以统计的时间段。这里需要注意的是是使用电话的时间总和(sum(active use cpu time)),这与占用时间的总和(sum(occupy cpu time))是有区别的。(例如一个用户得到了一分钟的使用权,在10秒钟内打了电话,然后去查询号码本花了20秒钟,再用剩下的30秒打了另一个电话,那么占用了电话1分钟,实际只是使用了40秒)
电话的Average Load体现的是在某一统计时间段内,所有使用电话的人加上等待电话分配的人一个平均统计。
电话利用率的统计能够反映的是电话被使用的情况,当电话长期处于被使用而没有的到足够的时间休息间歇,那么对于电话硬件来说是一种超负荷的运作,需要调整使用频度。而电话Average Load却从另一个角度来展现对于电话使用状态的描述,Average Load越高说明对于电话资源的竞争越激烈,电话资源比较短缺。对于资源的申请和维护其实也是需要很大的成本,所以在这种高Average Load的情况下电话资源的长期“热竞争”也是对于硬件的一种损害。
低利用率的情况下是否会有高Load Average的情况产生呢?理解占有时间和使用时间就可以知道,当分配时间片以后,是否使用完全取决于使用者,因此完全可能出现低利用率高Load Average的情况。由此来看,仅仅从CPU的使用率来判断CPU是否处于一种超负荷的工作状态还是不够的,必须结合Load Average来全局的看CPU的使用情况和申请情况。
所以回过头来再看测试部对于Load Average的要求,在我们机器为8个CPU的情况下,控制在10 Load左右,也就是每一个CPU正在处理一个请求,同时还有2个在等待处理。看了看网上很多人的介绍一般来说Load简单的计算就是2* CPU个数减去1-2左右(这个只是网上看来的,未必是一个标准)。
分享到:
相关推荐
"Linux系统中获得CPU利用率和内存使用情况" 知识点: 1.Linux系统中的/proc目录:Linux系统中的/proc目录是一个虚拟文件系统,提供了对系统硬件和软件的信息。在这个目录中,我们可以找到关于系统的各种信息,如...
压力测试衡量CPU的三个指标是指CPU Utilization、Load Average和Context Switch Rate,这三个指标是衡量CPU性能的重要指标。 CPU Utilization CPU Utilization是指CPU的利用率,也就是CPU当前的工作负载。一般来说...
在深入探讨UNIX系统中的负载平均值(Load Average)之前,我们需要了解一些基础知识。首先,负载平均值并不是一个UNIX命令,它更像一个嵌入式的度量指标,通常显示在像uptime和procinfo这样的其他UNIX命令的输出中。...
在输入查看可用的CPU核数命令,获得12时,意味着本系统可用CPU核数12...系统负载/CPU负载–是Linux系统中CPU利用率过高或过低的度量;CPU正在执行或处于等待状态的进程数。 平均负载(load average)-是在给定的1、5和1
在对系统的方法化分析中,首要且基本的工具之一常常是对系统的 CPU 利用率进 行简单测量。 Linux 以及大多数基于 UNIX 的操作系统都提供了一条命令来显示系统的 平均负荷 (loadaverage) 。 [huangc@V-02-01-...
System.out.println("CPU核心 " + cpu.getIndex() + " 的利用率:" + cpu.getCombined()); } } catch (SigarException e) { e.printStackTrace(); } ``` 5. 获取CPU负载平均值: ```java try { LoadAverage load...
CPU 负载(Load Average)和 CPU 利用率(CPU Usage)是两个不同的概念。CPU 负载指的是系统当前正在运行和等待运行的进程数之和,而 CPU 利用率则是当前正在运行的进程实时占用 CPU 的百分比。 Linux 指令应用 ...
本文将深入探讨Load Average的工作原理,并解析其计算方式,帮助你更好地理解和利用这一信息。 **1. Load Average的基本概念** Load Average是指在特定时间间隔内,系统处于活动状态(包括运行和等待CPU资源)的...
SAR提供了一种记录和报告系统性能数据的方式,包括CPU利用率。使用`sar -u`命令可以查看CPU使用情况,如果系统是多处理器的,加上`-M`选项可以获取每个CPU核心的单独报告。 SAR输出中的各项指标含义如下: - `%usr`...
在Linux系统中,CPU负载和CPU使用率是评估系统性能的两个重要指标,它们可以帮助我们了解系统的繁忙程度和资源利用状况。本文将深入探讨这两个概念及其关系。 **CPU使用率**指的是CPU在一段时间内用于执行任务的...
使用`sar -u`命令可以查看CPU利用率,`sar -u 5 100`则表示每5秒收集一次数据,持续100次。 在分析`sar`输出时,关注`%usr`(用户模式)、`%sys`(系统模式)、`%wio`(等待I/O的空闲时间)和`%idle`(其余空闲时间...
本文主要探讨了CPU利用率、平均负载、进程状态、中断率等核心概念。 首先,CPU利用率(CPU Utilization)是衡量CPU繁忙程度的重要参数,它表示CPU在特定时间内用于执行任务的比例。当CPU利用率超过75%,表明系统...
CPU利用率指的是CPU在单位时间内被占用的时间百分比,它由用户模式CPU利用率(User Mode CPU Utilization)和系统模式CPU利用率(System Mode CPU Utilization)组成。当这个值接近或超过80%时,通常表明系统正在承受较...
在示例中,我们可以看到系统在14:51:15的时候已经运行了62天10分钟,平均负载为0.02, 0.01, 0.00,这表明系统处于较为轻松的状态,CPU资源利用率低。 理解load average的关键在于,当这些值长时间超过系统的逻辑CPU...
例如,`mpstat`可以实时监测每个CPU核心的利用率,帮助识别哪个核心负担过重。`pidstat`则可以追踪特定进程的CPU、内存和I/O性能,找出资源消耗大户。此外,通过分析`/proc/interrupts`文件,可以获取中断统计信息,...
2. **资源争抢**:多个进程竞争同一资源可能导致CPU利用率上升。 3. **病毒或恶意软件**:系统中可能存在消耗资源的恶意程序。 4. **硬件故障**:如内存错误可能导致CPU过度工作来处理异常。 在内存高负载的排查中...
CPU利用率(CPU utilization)是最基本的指标,它显示了CPU在工作时间内的忙碌程度。当CPU利用率持续超过80%,可能意味着处理器资源紧张。Runable processes指示待执行的进程数量,如果这个值超过物理CPU数量的10倍,...
cls.send_msg(cls.g_web_ip + "服务器的CPU利用率超过" + cls.g_cpu_used + "了,快去看看咋回事!") else: print(sysstr + " CPU Adoption rate Cannot read.") ``` 3. **CPU平均负载**: 使用`uptime`命令...
首先,CPU利用率是衡量系统繁忙程度的重要指标。它分为用户空间CPU使用率(user)、内核空间CPU使用率(sys)以及空闲时间(idle)。通过命令`top`或`vmstat`可以实时查看这些数据。当用户空间CPU使用率过高时,可能...