首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

Linux 容器的资源管理(1)

Linux 容器的资源管理(1)

什么是虚拟机的重要资源
资源管理是将资源从资源提供方分配到资源用户的一个过程。对于资源管理的需求来自于资源过载(即,需求大于容量)以及需求与容量随着时间的推移而有所差异的事实。通过资源管理,可以动态重新分配资源,以便更高效地使用可用容量。资源包括 CPU(中央处理器)、内存、存储器和网络资源。本文主要介绍内存、CPU(中央处理器)和存储器。
LXC 虚拟机资源调配的两种方法直接修改配置文件LXC 虚拟机的配置文件是 lxc.conf,LXC 配置项都是以 key=value 的形式,LXC 采用 cgroup 系统来对容器进行资源管理,因此 cgroup 的各个子系统均可以使用。一个完成的配置文件包括 cgroup 部分、network 部分、rootfs 部分。
通过修改配置文件用户可以直接 LXC 虚拟机资源调配。本文主要介绍第二种方法。
使用相关命令行工具LXC 采用 cgroup 来对容器进行资源管理,并且所有 cgroup 子系统的配置参数均可以通过 lxc-cgroup 命令进行动态获得或者调整。首先看看 lxc-cgroup 命令的使用方法。
lxc-cgroup 命令格式:
1
lxc-cgroup --name=NAME subsystem [value]




-n, --name=NAME  容器名称
Subsystem 指定子系统对照组名
[value] 指定子系统对照组要设置值
配置 LXC 虚拟计算机的 CPU(中央处理器)资源
说明下面笔者使用的 LXC 虚拟计算机名称是 cjhlxc(下同):
1 首先查看虚拟机目前使用的资源列表
1
#lxc-cgroup -n cjhlxc devices.list




2 查看 LXC 虚拟计算机 cjhlxc 目前 CPU(中央处理器)资源使用情况
说明首先用户必须启动这个 cjhlxc,然后查看
1
$ lxc-start -n cjhlxc -d




$ lxc-cgroup -n cjhlxc cpuset.cpus
操作过程见图 1   
图 1说明:0-1 表示确实情况下 LXC 虚拟计算机使用是全部 CPU(中央处理器) 。
3 指定 LXC 虚拟计算机 cjhlxc 只能使用 CPU 1
1
#lxc-cgroup -n cjhlxc cpuset.cpus "1"




除了使用 lxc-cgroup 命令,也可以直接修改 LXC 虚拟计算机的配置文件:
1
# sudo vim /var/lib/lxc/cjhlxc /config




在文件结尾处添加一行:
1
〝lxc.cgroup.cpuset.cpus = 1〞




然后存盘退出。
然后用户可以重新查看一下
1
2
#lxc-cgroup -n cjhlxc cpuset.cpus   
1




注意此时输出直接从“0-1”变成“1”
说明:cpuset.cpus 是cpuset 子系统中的参数,指定允许这个 cgroup 中任务访问的 CPU(中央处理器)。这是一个用逗号分开的列表,格式为 ASCII,使用小横
线("-")代表范围,例如:cpuset.cpus=1,2-4
安装 mpstat 工具进行验证首先登录 LXC 虚拟计算机安装 sysstat 工具包
1
#lxc-console –n cjhlxc




下面这个命令是在 LXC 虚拟计算机 cjhlxc 上执行的
1
2
$ sudo apt-get install sysstat
$ mpstat -P ALL 2




输出见图 2
图 2 图 2 显示 CPU(中央处理器) 0 使用率低于 CPU(中央处理器) 1, 不过 CPU(中央处理器) 0 使用率也会变高, 因 mpstat 命令是显示物理 CPU(中央处理器) 信息, 主机计算机还是会使用 CPU(中央处理器) 0 。
更加细化分配 CPU(中央处理器)资源lxc 通过 cgroup 实现资源隔离功能。从 CPU 资源来说,主要有两个变量 cpu.shares 和 cpuset.cpus。cpu.shares 是一个 lxc 使用 cpu 的份额,按照百分比来计算。另外 cgroup 的目录下还有一个 cpu.shares 的文件,对其写入整数值可以控制该 cgroup 获得的时间片。如果我们希望 cjhlxc1 使用更多的 CPU(中央处理器)资源,cjhlxc2 使用较少的 CPU(中央处理器)资源,那么可以使用如下命令设置:
1
2
# lxc-cgroup -n cjhlxc2 cpu.shares 512
# lxc-cgroup -n cjhlxc1 cpu.shares 1024




通过以上设置后 cjhlxc1 资源占用比例是 66%,cjhlxc2 资源占用比例是 33% 。
说明:LXC 支持动态分配调整,以上操作均在不停止应用程序前提下完成。LXC 支持“资源抢占”,在共享 cpu 的前提下,忙碌的 lxc 会抢占闲置 lxc 的资源。
配置 LXC 虚拟计算机的内存资源内存子系统自动生成 cgroup 中任务使用的内存资源报告,并设定由那些任务使用的内存限制,内存子系统有两个参数:
memory.limit_in_bytes:设定用户内存的最大量(包括文件缓存)。
memory.memsw.limit_in_bytes:设定最大内存与 swap 用量之和。
应用实例1 设置 LXC 虚拟计算机 cjhlxc 使用的内存容量是 320 兆
使用 lxc-cgroup 命令
如果用户希望 LXC 虚拟计算机 cjhlxc 使用的内存容量是 320 兆,可以使用如下命令设置:
下面使用 lxc-cgroup 命令修改
1
#  lxc-cgroup  -n cjhlxc  memroy.limit_in_bytes 320000000




除了使用 lxc-cgroup 命令,也可以直接修改 LXC 虚拟计算机的配置文件:
1
# sudo vim /var/lib/lxc/cjhlxc /config




把配置文件添加一行:
1
lxc.cgroup.memory.limit_in_bytes = 320000000




2 设置 LXC 虚拟计算机 cjhlxc 取消 swap 功能
直接修改 LXC 虚拟计算机的配置文件
vim /var/lib/lxc/myUS1204_bak/config
# 加入以下二行
1
2
lxc.cgroup.memory.limit_in_bytes = 300000000
lxc.cgroup.memory.memsw.limit_in_bytes = 300000000      # 此项目的设定值与 memory.limit_in

返回列表