CN107783836B - 基于 Linux 容器控制Web 应用资源的方法和装置 - Google Patents
基于 Linux 容器控制Web 应用资源的方法和装置 Download PDFInfo
- Publication number
- CN107783836B CN107783836B CN201610790693.8A CN201610790693A CN107783836B CN 107783836 B CN107783836 B CN 107783836B CN 201610790693 A CN201610790693 A CN 201610790693A CN 107783836 B CN107783836 B CN 107783836B
- Authority
- CN
- China
- Prior art keywords
- application
- thread
- resource control
- control group
- application resource
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5027—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
- G06F9/5044—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals considering hardware capabilities
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/50—Indexing scheme relating to G06F9/50
- G06F2209/5018—Thread allocation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/50—Indexing scheme relating to G06F9/50
- G06F2209/504—Resource capping
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
本发明公开了一种基于Linux容器控制Web应用资源的方法和装置,涉及云计算领域。其中的方法包括:创建应用资源控制组;设置Web应用ID与应用资源控制组ID的映射关系;设置Web应用ID、用户线程ID与内核线程ID的映射关系;根据Web应用ID调用应用资源控制组的接口,并将内核线程ID写入对应的应用资源控制组的任务控制列表中;在调度内核线程时,根据内核线程ID执行应用资源控制组的资源控制策略,从而实现以线程为粒度对每个Web应用资源配额的精细控制。
Description
技术领域
本发明涉及云计算领域,尤其涉及一种基于Linux容器控制Web应用资源的方法和装置。
背景技术
轻量级Web应用基于Web应用引擎托管运行,Web应用引擎提供了应用运行所需的公共类库和运行时环境,在一个Web应用引擎上可以同时托管运行大量的轻量级Web应用,由于应用引擎上的所有应用都共享相同的主机资源,个别应用出现异常(如死循环)就可能耗尽整个主机的资源,因此需要对Web应用的资源配额进行控制。
如图1所示,Web应用引擎通常采用语言级的沙箱技术(如自定义类加载器、接口安全策略等)控制应用资源,为应用提供专用的线程和I/O接口,导致Web应用与应用引擎紧密绑定,影响了应用的可移植性,而且应用引擎运行在操作***用户态,无法控制内核态资源(如内核线程、CPU物理核等)。
另外,目前主流的Linux容器技术(如LXC、Docker等)主要以进程为粒度进行资源的控制,如图2所示,可以使用容器技术将Web应用和应用引擎整体打包,以进程容器的形式隔离运行,然而应用引擎通常需占用上百兆内存,这增加了轻量级Web应用部署和运行的开销。
发明内容
本发明要解决的一个技术问题是提供一种能够以线程为粒度精细控制轻量级Web应用资源配额的方案。
根据本发明一方面,提出一种基于Linux容器控制Web应用资 源的方法,包括:创建应用资源控制组;设置Web应用ID与应用资源控制组ID的映射关系;设置Web应用ID、用户线程ID与内核线程ID的映射关系;根据Web应用ID调用应用资源控制组的接口,并将内核线程ID写入对应的应用资源控制组的任务控制列表中;在调度内核线程时,根据内核线程ID执行应用资源控制组的资源控制策略。
进一步地,创建应用资源控制组包括:根据Web应用的类型和优先级创建应用资源控制组。
进一步地,设置Web应用ID、用户线程ID与内核线程ID的映射关系包括:在线程库内设置用户线程ID与内核线程ID的映射关系;Web应用ID对应的应用引擎调用底层语言或操作***线程库的接口获取用户线程ID对应的内核线程ID,从而建立Web应用ID与用户线程ID的映射关系以及Web应用ID与内核线程ID的映射关系。
进一步地,根据内核线程ID执行应用资源控制组的资源控制策略包括:根据内核线程ID获取对应的应用资源控制组;根据应用资源控制组配置的资源控制内核线程。
进一步地,根据应用资源控制组配置的资源控制内核线程包括:根据应用资源控制组配置的CPU、内存和I/O控制每个内核线程能够使用的CPU时间片、堆栈大小、Swap大小和/或I/O速率的上限。
进一步地,该方法还包括:应用资源控制组中对应的Web应用拥有相同的资源优先级。
根据本发明的另一方面,还提出一种基于Linux容器控制Web应用资源的装置,包括:控制组创建模块,用于创建应用资源控制组;应用部署管理模块,用于设置Web应用ID与应用资源控制组ID的映射关系;线程管理器模块,用于设置Web应用ID、用户线程ID与内核线程ID的映射关系;应用资源管理模块,用于根据Web应用ID调用应用资源控制组的接口,并将内核线程ID写入对应的应用资源控制组的任务控制列表中,以便在调度内核线程时,根据内核线程ID执行应用资源控制组的资源控制策略。
进一步地,控制组创建模块用于根据Web应用的类型和优先级创建应用资源控制组。
进一步地,线程管理器模块用于从线程库获取用户线程ID与内核线程ID的映射关系,并保存Web应用ID与用户线程ID的映射关系以及Web应用ID与内核ID的映射关系。
进一步地,应用资源管理模块用于根据内核线程ID获取对应的应用资源控制组,根据应用资源控制组配置的资源控制内核线程。
进一步地,应用资源管理模块用于根据应用资源控制组配置的CPU、内存和I/O控制每个内核线程能够使用的CPU时间片、堆栈大小、Swap大小和/或I/O速率的上限。
进一步地,应用资源控制组中对应的Web应用拥有相同的资源优先级。
与现有技术相比,本发明通过创建应用资源控制组,设置Web应用ID与应用资源控制组ID的映射关系以及Web应用ID、用户线程ID与内核线程ID的映射关系,根据Web应用ID调用应用资源控制组的接口,并将内核线程ID写入对应的应用资源控制组的任务控制列表中,在调度内核线程时,根据内核线程ID执行应用资源控制组的资源控制策略,从而实现以线程为粒度对每个Web应用资源配额的精细控制。
通过以下参照附图对本发明的示例性实施例的详细描述,本发明的其它特征及其优点将会变得清楚。
附图说明
构成说明书的一部分的附图描述了本发明的实施例,并且连同说明书一起用于解释本发明的原理。
参照附图,根据下面的详细描述,可以更加清楚地理解本发明,其中:
图1为现有基于应用沙箱的语言级应用资源控制方法的示意图。
图2为现有基于容器的进程级应用资源控制方法的示意图。
图3为本发明基于Linux容器控制Web应用资源的方法的一个实施例的流程示意图。
图4为本发明基于Linux容器控制Web应用资源的方法的另一个实施例的流程示意图。
图5为本发明基于Linux容器控制Web应用资源的装置的一个实施例的结构示意图。
图6为本发明基于Linux容器控制Web应用资源的一个具体应用实施例的示意图。
具体实施方式
现在将参照附图来详细描述本发明的各种示例性实施例。应注意到:除非另外具体说明,否则在这些实施例中阐述的部件和步骤的相对布置、数字表达式和数值不限制本发明的范围。
同时,应当明白,为了便于描述,附图中所示出的各个部分的尺寸并不是按照实际的比例关系绘制的。
以下对至少一个示例性实施例的描述实际上仅仅是说明性的,决不作为对本发明及其应用或使用的任何限制。
对于相关领域普通技术人员已知的技术、方法和设备可能不作详细讨论,但在适当情况下,所述技术、方法和设备应当被视为授权说明书的一部分。
在这里示出和讨论的所有示例中,任何具体值应被解释为仅仅是示例性的,而不是作为限制。因此,示例性实施例的其它示例可以具有不同的值。
应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步讨论。
为使本发明的目的、技术方案和优点更加清楚明白,以下结合具体实施例,并参照附图,对本发明进一步详细说明。
图3为本发明基于Linux容器控制Web应用资源的方法的一个 实施例的流程示意图。该方法包括以下步骤:
在步骤310,创建应用资源控制组。即定义若干个线程级资源控制组。例如,根据应用的性能模型或优先级定义n组应用资源控制组,为每个应用资源控制组创建一个CGroup(Control Group,控制组),并配置每个CGroup的CPU、内存和I/O资源上限。
在步骤320,设置Web应用ID与应用资源控制组ID的映射关系。在部署应用时,即将Web应用部署到应用引擎上时,绑定应用ID与应用资源控制组ID。
在步骤330,设置Web应用ID、用户线程ID与内核线程ID的映射关系。例如,Web应用ID对应的应用引擎调用线程库(如posix)的接口创建用户线程,线程库将用户线程绑定到内核线程。应用引擎再次调用线程库接口可以获取用户线程ID与内核线程ID的映射关系,从而建立Web应用ID与用户线程ID的对应关系以及Web应用ID与内核线程ID的映射关系。
在步骤340,根据Web应用ID调用应用资源控制组的接口,并将内核线程ID写入对应的应用资源控制组的任务控制列表中。
在步骤350,在调度内核线程时,根据内核线程ID执行应用资源控制组的资源控制策略。其中,操作***在调度内核线程时,执行与内核线程关联的CGroup控制组的资源控制策略,实现对CPU、内存和I/O的资源控制,即对应用的每个线程能够使用的CPU时间片、堆栈大小、Swap大小和I/O速率的上限进行控制。
在该实施例中,通过创建应用资源控制组,设置Web应用ID与应用资源控制组ID的映射关系以及Web应用ID、用户线程ID与内核线程ID的映射关系,根据Web应用ID调用应用资源控制组的接口,并将内核线程ID写入对应的应用资源控制组的任务控制列表中,在调度内核线程时,根据内核线程ID执行应用资源控制组的资源控制策略,从而实现以线程为粒度对每个Web应用资源配额的精细控制。
图4为本发明基于Linux容器控制Web应用资源的方法的另一个实施例的流程示意图。该方法包括以下步骤:
在步骤410,根据Web应用的类型和优先级创建应用资源控制组,为每个应用资源控制组创建一个CGroup。其中,可以配置每个CGroup的CPU、内存和I/O资源上限,并且每个应用资源控制组中对应的Web应用拥有相同的资源优先级。例如,同一个应用资源控制组的每条进程或内核线程能够获得相同比例的资源,优先级较高的应用资源控制组里面的进程或线程能获得较多的资源,另外,如果同组的两个应用的线程数一样,两个应用能获得相同的资源,否则线程数多的应用能获得较多的资源。
假设***有两个CPU控制组,cpu_g1、cpu_g2。其中cpu_g1的权重是100,cpu_g2的权重是200,即cpu_g2能获得的CPU时间片比cpu_g1多一倍。如果有两个应用app1、app2,并假设每个应用的线程数都一样,app1的线程都加到cpu_g1,app2的线程都加到cpu_g2,那么app1能够获得100/100+200的cpu时间,app2能够获得200/100+200的cpu时间。如果现在有一个app3添加到cpu_g2中,那么app1能够获得的时间片为100/100+200*2,app2和app3能够获得的时间片均为200/100+200*2。
在步骤420,将Web应用部署到应用引擎上时,绑定应用ID与应用资源控制组ID。其中,Web应用与应用资源控制组是一对多关系,即每个Web应用只能绑定一个应用资源控制组,而一个应用资源控制组可以绑定多个应用。
在步骤430,应用引擎调用底层语言或操作***线程库的接口,从而获知Web应用ID与用户线程ID的对应关系以及Web应用ID与内核线程ID的映射关系。应用ID与用户线程ID是1:n关系,目前主流的Web应用引擎均采用1:1线程模型,即一条用户线程对应一条内核线程,例如基于Java的全系列Web服务器采用1:1线程模型。Web应用引擎也可以为是n:1线程模型,例如基于脚本的Web引擎,如ruby、Python等,另外,还可以是n:m线程模型,这种情况在Web引擎中很少见,通常是xen、kvm等虚拟机才会用到。
Web应用引擎通常采用多线程Web应用模型,当应用引擎接收 到某个Web应用的Web请求,应用引擎从公共线程池中获取空闲的线程,执行该应用的Web请求,在Web请求执行的过程中,Web应用还可以按需创建新的线程,异步处理耗时的任务,例如数据库操作、文件I/O操作等等。Web应用引擎和Web应用都是语言级的线程类提供的方法触发启动线程,例如Java应用引擎通过java.lang.Thread类的start()方法启动Java线程,PHP应用引擎通过Thread类的start()方法启动php线程,线程类的start方法一般通过调用底层C语言的pthread_create()函数创建内核线程,而pthread_create()再通过OS的clone调用为应用引擎的用户线程绑定内核线程,利用pthread_create()返回的pthread_t结构结合syscall***调用能够得到所创建内核线程的ID。
在步骤440,根据Web应用ID调用应用资源控制组的接口,并将内核线程ID写入对应的应用资源控制组的任务控制列表中。其中,应用资源控制组的任务控制列表是通过CGroup的Tasks文件控制的,可以将要控制的内核线程ID或进程ID写入到对应CGroup目录的tasks文件中。以Ubuntu为例,tasks文件放在/sys/fs/cgroup/cpu/groupname/tasks的目录下。
在Web应用引擎采用n:1和n:m线程模型时,存在一个内核线程对应多个用户线程的情况,也就是一个内核线程对应多个应用的情况,这时内核线程与应用资源控制组的映射关系可采用把内核线程添加到资源配额最高的应用所对应的应用资源控制组中。
在步骤450,操作***在调度内核线程时,执行与内核线程关联的应用资源控制组的资源控制策略,实现对CPU、内存和I/O的资源控制。
在该实施例中,为每类Web应用定义一个应用资源控制组,同一个应用资源控制组中的应用拥有相同的资源优先级,并为每个应用资源控制组分配一个CGroup,通过Linux的CGroup机制控制应用引擎的托管应用资源,在Web应用部署时将应用与资源控制组绑定,将分配给Web应用的线程映射成内核线程,将内核线程ID添加到 CGroup的任务控制列表中,以便在调度内核线程时,根据内核线程ID执行对应应用资源控制组的资源控制策略。该实施例能够增强实现轻量级Web应用资源隔离,为轻量级Web应用提供了一种线程级的资源隔离手段,另外,还提升Web应用部署密度和效率,可在单个应用引擎上部署大量轻负载Web应用,并能根据应用负载变化在线调整应用的资源配额。
图5为本发明基于Linux容器控制Web应用资源的装置的一个实施例的结构示意图。该装置包括控制组创建模块510、应用部署管理模块520、线程管理器模块530和应用资源管理模块540,其中:
控制组创建模块510用于创建应用资源控制组。即定义若干个线程级资源控制组。例如,根据应用的性能模型或优先级定义n组应用资源控制组,为每个应用资源控制组创建一个CGroup,并配置每个CGroup的CPU、内存和I/O资源上限。
应用部署管理模块520用于设置Web应用ID与应用资源控制组ID的映射关系。在部署应用时,即将Web应用部署到应用引擎上时,绑定应用ID与应用资源控制组ID。
线程管理器模块530用于设置Web应用ID、用户线程ID与内核线程ID的映射关系。其中,在一对一、多对一线程模型中同一个用户线程在整个生命周期中绑定相同的内核线程ID,在多对多线程模型中,用户线程在生命周期中可能绑定不同的内核线程,因此需要周期轮询用户线程ID对应的内核线程ID或监听线程绑定关系变化事件。
应用资源管理模块540用于根据Web应用ID调用应用资源控制组的接口,并将内核线程ID写入对应的应用资源控制组的任务控制列表中,以便在调度内核线程时,根据内核线程ID执行应用资源控制组的资源控制策略。其中,操作***在调度内核线程时,执行与内核线程关联的CGroup控制组的资源控制策略,实现对CPU、内存和I/O的资源控制,即对应用的每个线程能够使用的CPU时间片、堆栈大小、Swap大小和I/O速率的上限进行控制。
在该实施例中,通过创建应用资源控制组,设置Web应用ID与 应用资源控制组ID的映射关系以及Web应用ID、用户线程ID与内核线程ID的映射关系,根据Web应用ID调用应用资源控制组的接口,并将内核线程ID写入对应的应用资源控制组的任务控制列表中,在调度内核线程时,根据内核线程ID执行应用资源控制组的资源控制策略,从而实现以线程为粒度对每个Web应用资源配额的精细控制。
在本发明的另一个实施例中,控制组创建模块510用于根据Web应用的类型和优先级创建应用资源控制组,为每个应用资源控制组创建一个CGroup。其中,可以配置每个CGroup的CPU、内存和I/O资源上限,并且每个应用资源控制组中对应的Web应用拥有相同的资源优先级。以CPU为例,操作***的CPU子***通过CFS调度器调度CPU资源,将所有活跃状态的进程或内核线程添加到红黑树,并将CPU的虚拟运行时间作为红黑树节点的排序依据,虚拟运行时间越小的节点优先调度,其中虚拟运行时间由进程/线程的实际运行时间和控制组的CPU权重决定,权重与虚拟运行时间成反比,即权重越大虚拟运行时间越小,被调度的几率越高。
应用部署管理模块520用于将Web应用部署到应用引擎上时,绑定应用ID与应用资源控制组ID。其中,Web应用与应用资源控制组是一对多关系,即每个Web应用只能绑定一个应用资源控制组,而一个应用资源控制组可以绑定多个应用。
线程管理器模块530用于从线程库获取用户线程ID与内核线程ID的映射关系,并保存Web应用ID与用户线程ID的映射关系以及Web应用ID与内核ID的映射关系。
应用资源管理模块540用于根据Web应用ID调用应用资源控制组的接口,并将内核线程ID写入对应的应用资源控制组的任务控制列表中,以便操作***在调度内核线程时,执行与内核线程关联的应用资源控制组的资源控制策略,实现对CPU、内存和I/O的资源控制。
其中,应用资源控制组的任务控制列表是通过CGroup的Tasks文件控制的,可以将要控制的内核线程ID或进程ID写入到对应CGroup目录的tasks文件中。
在该实施例中,为每类Web应用定义一个应用资源控制组,同一个应用资源控制组中的应用拥有相同的资源优先级,并为每个应用资源控制组分配一个CGroup,通过Linux的CGroup机制控制应用引擎的托管应用资源,在Web应用部署时将应用与资源控制组绑定,将分配给Web应用的线程映射成内核线程,将内核线程ID添加到CGroup的任务控制列表中,以便在调度内核线程时,根据内核线程ID执行对应应用资源控制组的资源控制策略。该实施例能够增强实现轻量级Web应用资源隔离,为轻量级Web应用提供了一种线程级的资源隔离手段,另外,还提升Web应用部署密度和效率,可在单个应用引擎上部署大量轻负载Web应用,并能根据应用负载变化在线调整应用的资源配额。
图6为本发明基于Linux容器控制Web应用资源的一个具体应用实施例的示意图。
首先定义了两组应用资源控制组,并为每个应用资源控制组创建一个CGroup,如创建CGroupAPP1和CGroupAPP2,并分别为CGroupAPP1和CGroupAPP2配置CPU、内存和I/O资源上限。
在该实施例中,扩展容器引擎,扩展后的容器引擎包括应用部署管理模块、应用资源管理模块和容器资源管理模块。其中,在将Web应用部署到应用引擎上时,由应用部署管理模块管理Web应用与应用线程资源控制组的关系,即将Java应用1和Ruby应用1分别绑定CGroupAPP1,将Java应用2和Ruby应用2分别绑定CGroupAPP2。另外,CGroupAE1和CGroupAE2是面向应用引擎的控制组,控制的是应用引擎的主进程资源,将应用引擎部署在容器中,通过容器自身的机制实现应用引擎的管理和主进程资源控制。其中,各CGroup由CGroups管理器进行管理。另外,由应用资源管理模块管理应用的线程任务与应用资源控制组的对应关系,由容器资源管理模块控制应用引擎级别的资源,对容器资源进行隔离和控制。
另外,在同一个主机上,相同的应用引擎只需要部署一次,即每个主机上每种应用引擎最多只有一个实例。应用引擎以容器镜像形式 部署,应用以应用包(如WAR)形式部署,通过应用部署模块部署到指定主机的应用引擎中,一个应用引擎上可以部署多个应用,进而减少了轻量级Web应用部署和运行的开销。
本实施例还在应用引擎中增加了线程管理器模块,线程管理器模块负责将分配给应用的用户线程映射成内核线程,并绑定内核线程与应用线程的关系。其中是线程管理器模块对Web应用引擎的原线程管理器进行了二次封装,提供与原线程管理器相同的线程操作接口。Web应用引擎通常在启动时加载线程管理器,加载的线程管理器可以是由底层语言环境(如JRE)提供的,也可以是应用引擎基于底层语言环境的线程管理器或操作***线程库二次封装后提供的。
在该实施例中,针对当前高密度托管的轻量级Web应用的资源难以有效隔离控制的问题,首先定义若干个线程级资源控制组,在部署应用时将应用与线程级资源控制组关联,在为应用创建或分配线程时将对应的内核线程ID写入与该应用关联的线程资源控制组中,操作***在调度内核线程时执行对应控制组的资源配额,从而实现每个Web应用资源配额的精细控制。另外,该实施例中应用仍然使用原有的线程接口,资源的控制过程由线程管理器模块内部实现,资源控制机制对应用透明,无需修改应用代码,保证应用的可移植性。
至此,已经详细描述了本发明。为了避免遮蔽本发明的构思,没有描述本领域所公知的一些细节。本领域技术人员根据上面的描述,完全可以明白如何实施这里公开的技术方案。
可能以许多方式来实现本发明的方法以及装置。例如,可通过软件、硬件、固件或者软件、硬件、固件的任何组合来实现本发明的方法以及装置。用于所述方法的步骤的上述顺序仅是为了进行说明,本发明的方法的步骤不限于以上具体描述的顺序,除非以其它方式特别说明。此外,在一些实施例中,还可将本发明实施为记录在记录介质中的程序,这些程序包括用于实现根据本发明的方法的机器可读指令。因而,本发明还覆盖存储用于执行根据本发明的方法的程序的记录介质。
虽然已经通过示例对本发明的一些特定实施例进行了详细说明,但是本领域的技术人员应该理解,以上示例仅是为了进行说明,而不是为了限制本发明的范围。本领域的技术人员应该理解,可在不脱离本发明的范围和精神的情况下,对以上实施例进行修改。本发明的范围由所附权利要求来限定。
Claims (12)
1.一种基于Linux容器控制Web应用资源的方法,其特征在于,包括:
创建应用资源控制组,定义线程级应用资源控制组;
设置Web应用ID与应用资源控制组ID的映射关系;
设置所述Web应用ID、用户线程ID与内核线程ID的映射关系;
根据所述Web应用ID调用应用资源控制组的接口,并将所述内核线程ID写入对应的所述应用资源控制组的任务控制列表中;
在调度内核线程时,根据所述内核线程ID执行所述应用资源控制组的资源控制策略。
2.根据权利要求1所述的方法,其特征在于,所述创建应用资源控制组包括:
根据所述Web应用的类型和优先级创建所述应用资源控制组。
3.根据权利要求1所述的方法,其特征在于,所述设置所述Web应用ID、用户线程ID与内核线程ID的映射关系包括:
在线程库内设置所述用户线程ID与所述内核线程ID的映射关系;
所述Web应用ID对应的应用引擎调用所述线程库的接口获取所述用户线程ID对应的内核线程ID,从而建立所述Web应用ID与所述用户线程ID的映射关系以及所述Web应用ID与所述内核线程ID的映射关系。
4.根据权利要求1-3任一所述的方法,其特征在于,所述根据所述内核线程ID执行所述应用资源控制组的资源控制策略包括:
根据所述内核线程ID获取对应的所述应用资源控制组;
根据所述应用资源控制组配置的资源控制所述内核线程。
5.根据权利要求4所述的方法,其特征在于,所述根据所述应用资源控制组配置的资源控制所述内核线程包括:
根据所述应用资源控制组配置的CPU、内存和I/O控制每个所述内核线程能够使用的CPU时间片、堆栈大小、Swap大小和/或I/O速率的上限。
6.根据权利要求1-3任一所述的方法,其特征在于,还包括:
所述应用资源控制组中对应的Web应用拥有相同的资源优先级。
7.一种基于Linux容器控制Web应用资源的装置,其特征在于,包括:
控制组创建模块,用于创建应用资源控制组,定义线程级应用资源控制组;
应用部署管理模块,用于设置Web应用ID与应用资源控制组ID的映射关系;
线程管理器模块,用于设置所述Web应用ID、用户线程ID与内核线程ID的映射关系;
应用资源管理模块,用于根据所述Web应用ID调用应用资源控制组的接口,并将所述内核线程ID写入对应的所述应用资源控制组的任务控制列表中,以便在调度内核线程时,根据所述内核线程ID执行所述应用资源控制组的资源控制策略。
8.根据权利要求7所述的装置,其特征在于,所述控制组创建模块用于根据所述Web应用的类型和优先级创建所述应用资源控制组。
9.根据权利要求7所述的装置,其特征在于,所述线程管理器模块用于从线程库获取所述用户线程ID与所述内核线程ID的映射关系,并保存所述Web应用ID与所述用户线程ID的映射关系以及所述Web应用ID与所述内核线程ID的映射关系。
10.根据权利要求7-9任一所述的装置,其特征在于,所述应用资源管理模块用于根据所述内核线程ID获取对应的所述应用资源控制组,根据所述应用资源控制组配置的资源控制所述内核线程。
11.根据权利要求10所述的装置,其特征在于,所述应用资源管理模块用于根据所述应用资源控制组配置的CPU、内存和I/O控制所述每个内核线程能够使用的CPU时间片、堆栈大小、Swap大小和/或I/O速率的上限。
12.根据权利要求7-9任一所述的装置,其特征在于,所述应用资源控制组中对应的Web应用拥有相同的资源优先级。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610790693.8A CN107783836B (zh) | 2016-08-31 | 2016-08-31 | 基于 Linux 容器控制Web 应用资源的方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610790693.8A CN107783836B (zh) | 2016-08-31 | 2016-08-31 | 基于 Linux 容器控制Web 应用资源的方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107783836A CN107783836A (zh) | 2018-03-09 |
CN107783836B true CN107783836B (zh) | 2020-10-09 |
Family
ID=61451510
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610790693.8A Active CN107783836B (zh) | 2016-08-31 | 2016-08-31 | 基于 Linux 容器控制Web 应用资源的方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107783836B (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111290858B (zh) * | 2020-05-11 | 2020-08-11 | 腾讯科技(深圳)有限公司 | 输入输出资源管理方法、装置、计算机设备和存储介质 |
CN113806011B (zh) * | 2021-08-17 | 2023-12-19 | 曙光信息产业股份有限公司 | 集群资源控制方法和装置、集群、计算机可读存储介质 |
CN116431335B (zh) * | 2023-03-21 | 2024-06-07 | 哈尔滨工业大学 | 一种基于控制组的容器消息队列资源配额控制方法 |
CN117290116B (zh) * | 2023-11-27 | 2024-02-23 | 和创(北京)科技股份有限公司 | 可控资源的动态代码运行方法、装置、设备及*** |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2001265609A (ja) * | 2000-03-16 | 2001-09-28 | Omron Corp | 演算処理装置 |
JP2005251184A (ja) * | 2004-03-04 | 2005-09-15 | Internatl Business Mach Corp <Ibm> | マルチノード型コンピュータ・システムにおいてリソースを管理する装置、方法、およびプログラム |
CN102831015A (zh) * | 2012-08-01 | 2012-12-19 | 华为技术有限公司 | 多核处理器的调度方法和设备 |
CN104407924A (zh) * | 2014-10-31 | 2015-03-11 | 小米科技有限责任公司 | 内存优化方法及装置 |
WO2015191358A1 (en) * | 2014-06-10 | 2015-12-17 | Qualcomm Incorporated | Systems and methods of managing processor device power consumption |
-
2016
- 2016-08-31 CN CN201610790693.8A patent/CN107783836B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2001265609A (ja) * | 2000-03-16 | 2001-09-28 | Omron Corp | 演算処理装置 |
JP2005251184A (ja) * | 2004-03-04 | 2005-09-15 | Internatl Business Mach Corp <Ibm> | マルチノード型コンピュータ・システムにおいてリソースを管理する装置、方法、およびプログラム |
CN102831015A (zh) * | 2012-08-01 | 2012-12-19 | 华为技术有限公司 | 多核处理器的调度方法和设备 |
WO2015191358A1 (en) * | 2014-06-10 | 2015-12-17 | Qualcomm Incorporated | Systems and methods of managing processor device power consumption |
CN104407924A (zh) * | 2014-10-31 | 2015-03-11 | 小米科技有限责任公司 | 内存优化方法及装置 |
Non-Patent Citations (3)
Title |
---|
GPUVerify: a verifier for GPU kernels;Adam Betts 等;《Proceedings of the ACM international conference on Object oriented programming systems languages and applications》;20121231;113-131 * |
基于WEB的***组态;刁勇;《中国优秀硕士学位论文全文数据库 信息科技辑》;20060415;I138-190 * |
电信运营商对容器技术的探索和思考;陆钢 等;《电信科学》;20160820(第8期);159-163 * |
Also Published As
Publication number | Publication date |
---|---|
CN107783836A (zh) | 2018-03-09 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP6646114B2 (ja) | 動的仮想マシンサイジング | |
KR101658035B1 (ko) | 가상 머신 모니터 및 가상 머신 모니터의 스케줄링 방법 | |
US9766945B2 (en) | Virtual resource scheduling for containers with migration | |
CN110888743B (zh) | 一种gpu资源使用方法、装置及存储介质 | |
EP3332321B1 (en) | Process and thread launch features | |
CN107783836B (zh) | 基于 Linux 容器控制Web 应用资源的方法和装置 | |
US8161453B2 (en) | Method and apparatus for implementing task management of computer operations | |
US8549524B2 (en) | Task scheduler for cooperative tasks and threads for multiprocessors and multicore systems | |
US20150277993A1 (en) | Task Processing Method and Virtual Machine | |
US20170024251A1 (en) | Scheduling method and apparatus for distributed computing system | |
US11061729B2 (en) | Throttling logging processes | |
US11740921B2 (en) | Coordinated container scheduling for improved resource allocation in virtual computing environment | |
US10983846B2 (en) | User space pre-emptive real-time scheduler | |
KR20100073980A (ko) | 하이브리드 시스템에서 작업부하를 플랫폼 간에 이동시키기 위한 시스템 및 방법 | |
CN115686805A (zh) | Gpu资源共享的方法和装置、调度gpu资源共享的方法和装置 | |
Chen et al. | Pufferfish: Container-driven elastic memory management for data-intensive applications | |
Chen et al. | Preemptive and low latency datacenter scheduling via lightweight containers | |
JP2007280397A (ja) | 複数処理ノードを含むコンピュータ・システムでプログラムをロードする方法、該プログラムを含むコンピュータ可読媒体、及び、並列コンピュータ・システム | |
US8010963B2 (en) | Method, apparatus and program storage device for providing light weight system calls to improve user mode performance | |
US9619277B2 (en) | Computer with plurality of processors sharing process queue, and process dispatch processing method | |
McBride | SledgeEDF: deadline-driven serverless for the edge | |
JP7257407B2 (ja) | 外部例外処理 | |
Li et al. | A thread scheduling model for highly concurrent IoT platforms | |
Khan | Simulation of multi-core scheduling in real-time embedded systems | |
CN117519906A (zh) | 一种基于自主架构服务器的虚拟机管理和调度方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |