关于性能优化:技术分享-使用-systemd-修改资源隔离配置

41次阅读

共计 1756 个字符,预计需要花费 5 分钟才能阅读完成。

作者:晏泽
爱可生售后团队成员,次要负责公司数据库运维产品问题诊断;致力在数据库和 IT 畛域里摸爬滚打中。
本文起源:原创投稿
* 爱可生开源社区出品,原创内容未经受权不得随便应用,转载请分割小编并注明起源。


本文关键字: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

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 里与资源管理相干的参数,即可达到资源隔离配置的目标。

正文完
 0