作者:晏泽
爱可生售后团队成员,次要负责公司数据库运维产品问题诊断;致力在数据库和 IT 畛域里摸爬滚打中。
本文起源:原创投稿
*爱可生开源社区出品,原创内容未经受权不得随便应用,转载请分割小编并注明起源。
本文关键字:Linux、systemd、资源隔离
一,批改systemd unit file
为了给程序配置资源隔离,通常咱们会到cgroup层级树下的控制器里,创立或者批改控制组文件。
在Linux7中,如果为程序配置了systemd服务,除了间接批改控制组文件之外,还能够通过systemd相干命令对程序的资源隔离配置进行批改。
1.1 批改办法
有两种办法能够对配置了systemd的程序进行资源隔离:
- 命令行批改:通过执行
systemctl set-property
命令实现,模式为systemctl set-property name parameter=value
;批改默认即时失效 - 手工批改文件:间接编辑程序的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
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
直观查看,见下文图片),具体表现为:
- 将service unit、scope unit或者slice unit在systemd层级树里的门路,与对应的cgroup资源控制器门路进行匹配
- unit file里有对应资源管理配置参数,间接作用于cgroup对应的资源控制器
因而,通过批改程序的systemd unit file里与资源管理相干的参数,即可达到资源隔离配置的目标。