前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >技术分享 | 使用 systemd 修改资源隔离配置

技术分享 | 使用 systemd 修改资源隔离配置

作者头像
爱可生开源社区
发布2020-07-21 16:36:06
2.4K0
发布2020-07-21 16:36:06
举报

本文关键字:Linux、systemd、资源隔离

⼀、修改 systemd unit file

为了给程序配置资源隔离,通常我们会到 cgroup 层级树下的控制器⾥,创建或者修改控制组⽂件。

在 Linux7 中,如果为程序配置了 systemd 服务,除了直接修改控制组文件之外,还可以通过 systemd 相关命令对程序的资源隔离配置进行修改。

1.1 修改方法

有两种方法可以对配置了 systemd 的程序进行资源隔离:

1. 命令行修改:通过执行 systemctl set-property 命令实现,形式为 systemctl set-property name parameter=value;修改默认即时生效。

2. 手工修改文件:直接编辑程序的 systemd unit file 文件,完成之后需手工执行 systemctl daemon-reload 更新配置,并重启服务 systemctl restart name.service

systemd unit file 里支持的资源隔离配置项,如常见的:

  • CPUQuota=value 该参数表示服务可以获取的最大 CPU 时间,value 为百分数形式,高于 100% 表示可使用 1 核以上的 CPU。与 cgroup cpu 控制器 cpu.cfs_quota_us 配置项对应。
  • MemoryLimit=value 该参数表示服务可以使用的最大内存量,value 可以使用 K, M, G, T 等后缀表示值的大小。与 cgroup memory 控制器 memory.limit_in_bytes 配置项对应。

完整的配置项列表,请参考官方文档:2.3.2. Modifying Unit Files https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/resource_management_guide/sec-modifying_control_groups#sec-Modifying_Unit_Files

1.2 试验说明

以 MySQL CPU 资源管理为例。

环境信息:

  • 系统版本:CentOS Linux release 7.5.1804 (Core)
  • CPU 配置:4 核 CPU
  • 当资源限制为 1 核 CPU 时(CPUQuota=100%):
  • 修改 CPU 资源配置为:2核(CPUQuota=200%)
  • 再次测试,可以看到数据库在写入数据的过程中,%CPU 的值固定在 200% 左右。

二、简要原理说明

系统资源在 cgroup 里体现为资源控制器(resource controller/cgroup subsystem);每个controller 以层级目录结构的方式对系统资源进行管理。systemd 在系统开机时,默认自动将 cpu、blkio、memory 等控制器挂载到 /sys/fs/cgroup 路径下。

systemd 使⽤以下三种类型的 unit 来进⾏资源管理:

  • service:A system service
  • slice:A group of hierarchically organized units that manage system process
  • scope:An externally created process

其中 scope 类型只能由程序自动创建;其他两种可程序⾃动创建,也可⼿动创建。系统在启动的时候将默认创建⼀系列运⾏时必要的 service,同时也会创建四种必要的 slice:

  • -.slice — the root slice;
  • system.slice — the default place for all system services;
  • user.slice — the default place for all user sessions;
  • machine.slice — the default place for all virtual machines and Linux containers.

基于此,在 Linux 7 中,系统通过绑定程序的 systemd 层级树路径和 cgroup 资源控制器路径实现资源隔离(可使用命令 systemd-cgls 直观查看,见下文图片),具体表现为:

  1. 将 service unit、scope unit 或者 slice unit 在 systemd 层级树里的路径,与对应的 cgroup 资源控制器路径进⾏匹配
  2. unit file 里有对应资源管理配置参数,直接作用于 cgroup 对应的资源控制器

因此,通过修改程序的 systemd unit file 里与资源管理相关的参数,即可达到资源隔离配置的目的。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-07-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 爱可生开源社区 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 MySQL
腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档