云平台容器平均负载监视方法、终端设备及可读存储介质与流程

文档序号:25420219发布日期:2021-06-11 21:31阅读:72来源:国知局
云平台容器平均负载监视方法、终端设备及可读存储介质与流程

本公开涉及云服务器技术领域,尤其涉及一种云平台容器平均负载监视方法、终端设备及计算机可读存储介质。



背景技术:

近年来,云原生(cloudnative)可谓是it界最火的概念之一,且随着云计算普及进程的不断加深,有愈演愈烈的趋势。当下再谈云原生已经不是少数几个大企业的专属,越来越多的企业正在拥抱它,享受它带来的红利。

谈到云原生就不得不先了解一下容器技术。作为一种先进的虚拟化技术,容器技术可谓是撑起了云原生生态的半壁江山,已然成为了云原生时代软件开发和运维的标准基础设施。

对容器的监控也越来越重要,对于容器系统平均负载的计算,目前没有开箱即用的,其中谷歌开源产品cadvisor是一个容器资源监控工具,对系统平均负载的计算,是通过netlink方式来获取相关数据。然而在这种实现方案中,需要额外安装监控组件,如果是基于java的技术体系,无法直接使用netlink这种底层的内核通讯技术。

鉴于此,需要提供一种能够在任何平台以及任何语言体系,都可以使用的轻量的方式来快速实现容器平均负载监控的方法。



技术实现要素:

有鉴于此,本公开实施例提供一种云平台容器平均负载监视方法,至少部分解决现有技术中存在的问题。

第一方面,本公开实施例提供了一种云平台容器平均负载监视方法,所述方法包括如下步骤:

获取容器中所有进程的进程信息;

根据所述进程信息获取所述进程的状态信息;

根据所述进程的状态信息按照预设规则统计处于活动状态的进程数;

根据活动的进程数按照预设公式计算得到容器的平均负载。

根据本公开实施例的一种具体实现方式,所述获取容器中所有进程的进程信息的步骤中的所述进程信息包括进程id信息,则所述根据所述进程信息获取所述进程的状态信息的步骤,包括:

根据所述进程id信息获取所述进程的状态信息。

根据本公开实施例的一种具体实现方式,所述根据所述进程信息获取所述进程的状态信息的步骤包括:

从所有进程的进程信息中筛选出所有进程的状态信息。

根据本公开实施例的一种具体实现方式,所述根据所述进程id获取所述进程的状态信息的步骤,包括:

根据所述进程id获取所述进程对应的proc文件。

所述根据所述进程id获取所述进程对应的proc文件的步骤,包括:

根据所述进程id读取proc文件中的标识码;

根据所述proc文件的标识码匹配与所述进程的id码匹配的proc文件。

根据本公开实施例的一种具体实现方式,所述根据活动的进程数按照预设公式计算得到容器的平均负载步骤中的预设公式为:

load(t)=α*load(t-1)+n*(1-α)*loadt-1);

其中,load(t)为当前时刻下的平均负载值;load(t-1)为上一个时刻下的平均负载值;n为当前时间的活跃进程数;α为平滑常数,范围在[0,1]之间。

根据本公开实施例的一种具体实现方式,所述获取容器中所有进程的进程信息的步骤中的容器中的所有进程包括:当前处于就绪队列中的进程、处于等待ip的不可被信号中断的进程;

其中,所述根据所述进程的状态信息按照预设规则统计处于活动状态的进程数的步骤中的预设规则为:

将当前就绪队列中的进程和处于等待io的不可被信号中断的进程定为处于活动状态的进程。

根据本公开实施例的一种具体实现方式,所述进程的状态还包括如下状态:

可中断的睡眠状态、暂停状态或跟踪状态、进程成为僵尸进程的退出状态、进程即将被销毁的退出状态。

根据本公开实施例的一种具体实现方式,所述步骤获取容器中所有进程的进程信息的步骤包括:

间隔预设时间获取容器中的所有进程的进程信息。

为实现上述目的,本公开实施例还提出一种终端设备,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现如上任一项所述方法的步骤。

为实现上述目的,本公开实施例还提出一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现如上任一项所述方法的步骤。

本公开实施例中的云平台容器平均负载监视方法,所述方法通过获取容器中所有进程的进程信息;根据所述进程信息获取所述进程的状态信息;根据所述进程的状态信息按照预设规则统计处于活动状态的进程数;根据活动的进程数按照预设公式计算得到容器的平均负载。通过本公开的方案,对于不能方便获取底层系统调用的语言来说,可以很方便大致计算容器系统平均负载,达到监控容器的效果。方便在任何平台以及任何语言体系,都可以使用这种轻量的方式,快速实现容器平均负载监控。

附图说明

为了更清楚地说明本公开实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本公开的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它的附图。

图1为本公开实施例提供的一种云平台容器平均负载监视方法流程示意图;

图2为本公开实施例提供的电子设备示意图。

具体实施方式

下面结合附图对本公开实施例进行详细描述。

以下通过特定的具体实例说明本公开的实施方式,本领域技术人员可由本说明书所揭露的内容轻易地了解本公开的其他优点与功效。显然,所描述的实施例仅仅是本公开一部分实施例,而不是全部的实施例。本公开还可以通过另外不同的具体实施方式加以实施或应用,本说明书中的各项细节也可以基于不同观点与应用,在没有背离本公开的精神下进行各种修饰或改变。需说明的是,在不冲突的情况下,以下实施例及实施例中的特征可以相互组合。基于本公开中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本公开保护的范围。

需要说明的是,下文描述在所附权利要求书的范围内的实施例的各种方面。应显而易见,本文中所描述的方面可体现于广泛多种形式中,且本文中所描述的任何特定结构及/或功能仅为说明性的。基于本公开,所属领域的技术人员应了解,本文中所描述的一个方面可与任何其它方面独立地实施,且可以各种方式组合这些方面中的两者或两者以上。举例来说,可使用本文中所阐述的任何数目个方面来实施设备及/或实践方法。另外,可使用除了本文中所阐述的方面中的一或多者之外的其它结构及/或功能性实施此设备及/或实践此方法。

还需要说明的是,以下实施例中所提供的图示仅以示意方式说明本公开的基本构想,图式中仅显示与本公开中有关的组件而非按照实际实施时的组件数目、形状及尺寸绘制,其实际实施时各组件的型态、数量及比例可为一种随意的改变,且其组件布局型态也可能更为复杂。

另外,在以下描述中,提供具体细节是为了便于透彻理解实例。然而,所属领域的技术人员将理解,可在没有这些特定细节的情况下实践所述方面。

本公开实施例提供一种云平台容器平均负载监视方法。

监控部署在云服务器上微服务应用,目前行业大部分提供的监控指标都是云服务器的,在容器时代,云服务器上部署了多个微服务应用,不同的微服务应用之间资源隔离,因此容器的监控也显得尤为的重要,目前docker提供的容器监控指标,包含了容器cpu利用率,容器内存利用率,容器网络流量情况,唯独没有容器系统负载情况的指标,系统负载和cpu利用率是有差异的,当用户在监控面板查看各个微服务应用的时候,用户需要看到整个容器比较全面的信息,因此容器的系统负载也是必不可少的。

参见图1,本公开实施例提供的一种云平台容器平均负载监视方法,所述方法包括如下步骤:

步骤s10,获取容器中所有进程的进程信息;

系统负载记录的是cpu的负荷,能对cpu造成负荷的是进程(包括线程)的执行。负载的数值代表的是cpu还没处理完的进程的数目,空闲的系统负载为0。当一个进程正在被cpu执行或即将要被执行(即进入等待执行的队列)时,系统的负载加1;执行完成1时负载减1。从这种角度看有点像是高速公路,进去时取卡,出来时还卡,然后计算高速上一共有多少车辆。当然还有一些特殊情况(如有些系统对线程的计算方式不同)这里就不展开了。

一般情况下经常容易把平均负载和cpu使用率混淆,所以在这里,本公开实施例中也做一个区分。平均负载是指单位时间内,处于可运行状态和不可中断状态的进程数。而cpu使用率,是单位时间内cpu繁忙情况的统计,跟平均负载并不一定完全对应。比如:

cpu密集型进程,使用大量cpu会导致平均负载升高,此时这两者是一致的;

i/o密集型进程,等待i/o也会导致平均负载升高,但cpu使用率不一定很高;

大量等待cpu的进程调度也会导致平均负载升高,此时的cpu使用率也会比较高。

本公开实施例中,通过cgroup文件获取所有进程的进程信息。其中cgroup是controlgroup的简称,是linux内核提供的一个特性,用于限制和隔离一组进程对系统资源的使用。对不同资源的具体管理是由各个子系统分工完成的。

表1子系统信息表

例如需要获取容器中所有的进程id,则可以通过读取容器中进程的运行编号来查看容器中的进程。

此外,本公开实施例中还可以获取容器中的运行进程的总数,可以直接从cgroup中也可以获取运行在容器中的运行进程总数

根据上述两种方式,第一种获取容器中所有的进程的id信息,以及第二种获取容器中所有的运行进程总数,这两种方式对应的后续的获取容器中的进程的状态的方法是有所区别的。

步骤s20,根据所述进程信息获取所述进程的状态信息;

在本公开实施例中,为了获取容器的平均负载进一步需要获取容器的进程的状态,便于后续根据容器进程的状态进行筛选统计。

当步骤s10中的获取容器中所有进程的进程信息中的所述进程信息包括进程id信息时,即通过cgroup获取容器中所有的进程id,则所述根据所述进程信息获取所述进程的状态信息的步骤,包括:

根据所述进程id信息获取所述进程的状态信息。

具体地获取运行在容器中的所有进程后可以通过系统proc来获取进程状态,通过获取进程id然后根据进程id进一步读取该进程的状态信息。

具体地,所述进程的状态还包括如下状态:

可执行状态即可运行状态、可中断的睡眠状态、暂停状态或跟踪状态、进程成为僵尸进程的退出状态、进程即将被销毁的退出状态。

当步骤s10中的获取容器中所有进程的进程信息的步骤为获取容器中的所有进程中的运行进程的进程信息,包括获取容器中的所有进程中的运行进程的进程总数,其中cgroup中也可以获取运行在容器中的运行进程总数。

则所述根据所述进程信息获取所述进程的状态信息的步骤包括:

从运行在容器中的所有运行进程的状态信息中进行进程的状态核对,可以理解的是,cgroup中获取的这一部分的进程是处于运行在容器中的运行进程的信息,故而这一部分的进程的状态信息与在计算容器平均负载的过程中需要统计的满足状态要求的进程的状态信息应该是相符的,故而获取这一部分运行进程的状态信息以进行核对,这种情况下系统的运算是更加简单的,因为cgroup中获取的运行状态下的进程一般而言是在计算容器的平均负载时需要统计的。

以上两种方式,即通过获取所有进程的进程信息以及通过获取正在运行的进程的这两种方式在计算容器的平均负载过程中都是可取的。

步骤s30,根据所述进程的状态信息按照预设规则统计处于活动状态的进程数;

所述根据所述进程id获取所述进程的状态信息的步骤包括:根据所述进程id获取所述进程对应的proc文件。

其中,所述根据所述进程id获取所述进程对应的proc文件的步骤包括:

根据所述进程id读取proc文件中的标识码;

根据所述proc文件的标识码匹配与所述进程的id码匹配的proc文件。

步骤s40,根据活动的进程数按照预设公式计算得到容器的平均负载。

其中,预设公式为:

load(t)=α*load(t-1)+n*(1-α)*loadt-1);

其中,load(t)为当前时刻下的平均负载值;load(t-1)为上一个时刻下的平均负载值;n为当前时间的活跃进程数;α为平滑常数,范围在[0,1]之间。

注意,这里的平滑常数α,如果趋近于1,则load(t-1)对load(t-1)的影响越小。内核就是通过这个算法来计算最近5分钟,10分钟,15分钟的平滑均值。其中的平滑常数,linux内核是这样来选择的:

α=e-5/(60*m)

其中:5表示5s,作分子。60表示60s。m表示分钟,1,5,15。60*m作为分母。把m带入到公式计算,分别能计算出α为0.920044415,0.983471454,0.994459848。

内核不可能一直监控着内核中的进程数量,更现实的做法是隔一段时间采集一组数据,再与前面的数据一起来预测当前的系统负载。如果将过去和现在的数据都同等对待,给予同样的权重,那么计算公式就是简单的使用过去的数据加上现在的数据来求平均值。然而如果采用这种方式的话,过去的数据就和现在的数据一样重要。很显然,在使用数据来预测未来时,还是更近的数据权重更高更有说服力。因此,在这部分,内核采用的方式是所谓的指数平滑法(exponentialsmoothing),其思想在于:给当前采集的数据,以及上一次采集周期的数据分别以权重值,通过把两部分加成起来计算平滑均值,故而得到上述的计算公式。

本公开实施例的方法通过获取容器中所有进程的进程信息;根据所述进程信息获取所述进程的状态信息;根据所述进程的状态信息按照预设规则统计处于活动状态的进程数;根据活动的进程数按照预设公式计算得到容器的平均负载。通过本公开的方案,对于不能方便获取底层系统调用的语言来说,可以很方便大致计算容器系统平均负载,达到监控容器的效果。方便在任何平台以及任何语言体系,都可以使用这种轻量的方式,快速实现容器平均负载监控。

与上面的方法实施例相对应,本公开实施例还提供了一种云平台容器平均负载监视系统,所示云平台容器平均负载监视系统可以对应的执行上述方法实施例中的内容,本实施例未详细描述的部分,参照上述方法实施例中记载的内容,在此不再赘述。

参见图2,本公开实施例还提供了一种电子设备20,该电子设备包括:

至少一个处理器;以及,

与该至少一个处理器通信连接的存储器;其中,

该存储器存储有可被该至少一个处理器执行的指令,该指令被该至少一个处理器执行,以使该至少一个处理器能够执行前述方法实施例中的云平台容器平均负载监视方法。

本公开实施例还提供了一种非暂态计算机可读存储介质,该非暂态计算机可读存储介质存储计算机指令,该计算机指令用于使该计算机执行前述方法实施例中的云平台容器平均负载监视方法。

本公开实施例还提供了一种计算机程序产品,该计算机程序产品包括存储在非暂态计算机可读存储介质上的计算程序,该计算机程序包括程序指令,当该程序指令被计算机执行时,使该计算机执行前述方法实施例中的的云平台容器平均负载监视方法。

下面参考图2,其示出了适于用来实现本公开实施例的电子设备20的结构示意图。本公开实施例中的电子设备可以包括但不限于诸如移动电话、笔记本电脑、数字广播接收器、pda(个人数字助理)、pad(平板电脑)、pmp(便携式多媒体播放器)、车载终端(例如车载导航终端)等等的移动终端以及诸如数字tv、台式计算机等等的固定终端。图2示出的电子设备仅仅是一个示例,不应对本公开实施例的功能和使用范围带来任何限制。

如图2所示,电子设备20可以包括处理装置(例如中央处理器、图形处理器等)201,其可以根据存储在只读存储器(rom)202中的程序或者从存储装置208加载到随机访问存储器(ram)203中的程序而执行各种适当的动作和处理。在ram203中,还存储有电子设备20操作所需的各种程序和数据。处理装置201、rom202以及ram203通过总线204彼此相连。输入/输出(i/o)接口205也连接至总线204。

通常,以下装置可以连接至i/o接口205:包括例如触摸屏、触摸板、键盘、鼠标、图像传感器、麦克风、加速度计、陀螺仪等的输入装置206;包括例如液晶显示器(lcd)、扬声器、振动器等的输出装置207;包括例如磁带、硬盘等的存储装置208;以及通信装置209。通信装置209可以允许电子设备20与其他设备进行无线或有线通信以交换数据。虽然图中示出了具有各种装置的电子设备20,但是应理解的是,并不要求实施或具备所有示出的装置。可以替代地实施或具备更多或更少的装置。

特别地,根据本公开的实施例,上文参考流程图描述的过程可以被实现为计算机软件程序。例如,本公开的实施例包括一种计算机程序产品,其包括承载在计算机可读介质上的计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信装置209从网络上被下载和安装,或者从存储装置208被安装,或者从rom202被安装。在该计算机程序被处理装置201执行时,执行本公开实施例的方法中限定的上述功能。

需要说明的是,本公开上述的计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质或者是上述两者的任意组合。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(ram)、只读存储器(rom)、可擦式可编程只读存储器(eprom或闪存)、光纤、便携式紧凑磁盘只读存储器(cd-rom)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本公开中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。而在本公开中,计算机可读信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读信号介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:电线、光缆、rf(射频)等等,或者上述的任意合适的组合。

上述计算机可读介质可以是上述电子设备中所包含的;也可以是单独存在,而未装配入该电子设备中。

上述计算机可读介质承载有一个或者多个程序,当上述一个或者多个程序被该电子设备执行时,使得该电子设备:获取至少两个网际协议地址;向节点评价设备发送包括所述至少两个网际协议地址的节点评价请求,其中,所述节点评价设备从所述至少两个网际协议地址中,选取网际协议地址并返回;接收所述节点评价设备返回的网际协议地址;其中,所获取的网际协议地址指示内容分发网络中的边缘节点。

或者,上述计算机可读介质承载有一个或者多个程序,当上述一个或者多个程序被该电子设备执行时,使得该电子设备:接收包括至少两个网际协议地址的节点评价请求;从所述至少两个网际协议地址中,选取网际协议地址;返回选取出的网际协议地址;其中,接收到的网际协议地址指示内容分发网络中的边缘节点。

可以以一种或多种程序设计语言或其组合来编写用于执行本公开的操作的计算机程序代码,上述程序设计语言包括面向对象的程序设计语言—诸如java、smalltalk、c++,还包括常规的过程式程序设计语言—诸如“c”语言或类似的程序设计语言。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络——包括局域网(lan)或广域网(wan)—连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。

附图中的流程图和框图,图示了按照本公开各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,该模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。

描述于本公开实施例中所涉及到的单元可以通过软件的方式实现,也可以通过硬件的方式来实现。其中,单元的名称在某种情况下并不构成对该单元本身的限定,例如,第一获取单元还可以被描述为“获取至少两个网际协议地址的单元”。

应当理解,本公开的各部分可以用硬件、软件、固件或它们的组合来实现。

以上所述,仅为本公开的具体实施方式,但本公开的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本公开揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本公开的保护范围之内。因此,本公开的保护范围应以权利要求的保护范围为准。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1