1. CGroup(控制群组)、slice(切片)、scop、service

  控制群组(control group)是linux kernel的一项功能, 该功能允许linux对RHEL7中systemd下挂载的所有进程按类别分组, 从而使得系统管理员可以按需对linux的系统资源(如CPU时间、系统内存、网络带宽、磁盘IO等)进行合理分配. 通过CGroup进行系统资源切片(slice), 系统管理员可以在分配、排序、拒绝、管理和监控系统资源等方面, 进行精细化控制, 使硬件资源在应用程序和用户之间合理分配, 最大限度挖掘系统软硬件性能.

  CGroup的操作对象slice、scope、service 是由systemd自动创建的. RHEL7中运行的所有进程都是systemd的子进程, systemd创建的进程(实际是用户发出操作指令,systemd按照指令创建进程)会由systemd按照相应的指令参数分配到对应的slice、scope、service中,该进程将得到CGroup事先分配好的各种系统资源(特殊情况下,系统管理员为给特定程序或进程组优先分配系统资源,通常会单独为该进程组创建或优化系统资源切片(slice)).

2. linux Kernel的资源管控器

  资源管控器(CGroup子系统)更直观的概念类似于windows中的控制面板,但是资源管控器在linux中可调校的参数更多,管理更复杂.

  RHEL7中systemd默认启用了以下管控器:

  blkio —— 对输入/输出访问存取块设备设定权限;

  cpu —— 使用CPU调度程序让CGroup的任务可以存取CPU, 与CPUACCT管控器一起挂载在同一个mount上;

  cpuset —— 给cgroup中的任务分配独立CPU和内存节点;

  devices —— 允许或禁止cgroup中的任务存取设备;

  freezer —— 暂停或恢复cgroup中的任务;

  memory —— 限制cgroup中任务可用内存, 并且自动生成任务占用内存资源的报告;

  net_cls —— 使用等级识别符(classid)标记网络数据包,使linux的流量控制器(tc指令)可以识别来自特定cgroup的任务数据包;

  perf_event —— 允许使用perf工具来监控cgroup;

  hugetlb —— 允许使用大的虚拟内存页,并且给这些内存页强制设定可用资源量.

3. 管理控制群组(cgroup)

(1)创建控制群组

  systemd-run命令用于创建、启动临时的service或scope, 并在此单位中运行自定义指令. 在service单位中执行的指令在后台非同步启动, 由systemd进程调用.在scope单位中运行的指令直接从systemd-run进程中启动,继承systemd的执行状态.

systemd-run --unit=<name> --scope --slice=<slice_name> <command>

  name 自定义单位名称. 如果不指定--unit,系统会自动生成一个.

  --scope 创建临时scope单位. 如果不指定,系统默认创建的是service单位.

  --slice选项, 新建一个资源切片. 如果不指定名称, 系统会默认将创建的 .service或 .scope挂载到system.slice.

  command 将要在新建的 slice-scope或slice-service中运行的指令.

  下图是在同一个slice中分别运行了两个top命令,一个指定挂载到scope; 一个没有指定,系统默认挂载到service.

(2)删除控制群组

systemctl stop name.service
或者
systemctl kill name.service --kill-who=pid,... --signal=signal
或者
systemctl disable name.service

  发现了什么?很熟悉的味道!

(3)修改控制群组的单位文件

  这就是systemd依据/usr/lib/systemd/system/ 目录下的 XXX.service 文件对进程的管理. 换句话说, 就是我们可以自行创建修改 XXX.service, 实现对进程运行资源的管理.

  例如, 要给Apache service分配1500个CPU share (默认为1024个), 可以修改/usr/lib/systemd/system/httpd.service 文件中CPU、内存、网络带宽等值:

[service]
CPUShares=1500 #设定CPUShares
MenmoryLimit=1G #设定apache内存限制
BlockIOWeight=/usr/local/pic 750 #设定apache对/usr/local/pic目录的IO权重
BlockIOReadBandWith=/usr/local/pic 5M #设定apache对/usr/local/pic目录的最大读取带宽

重载daemon 使设定生效:

systemctl daemon-reload
systemctl restart httpd.service

(4)命令行修改进程的运行资源

  当然,还可以通过命令行设定进程的运行资源:

设定Apache https.service的CPU和内存占用量:
systemctl set-property httpd.service CPUShares= MenoryLimit=500M
利用 --runtime 选项使设定为临时更改:
systemctl set-property --runtime httpd.service CPUShares= MemoryLimit=500M

  同一台主机,kvm1中运行DB1.service, km2中运行DB.2service, 为DB1、DB2根据使用优先级分配IO资源:

systemctl set-property DB1.service BlockIOWeight=
systemctl set-property DB2.service BlockIOWeight=

  为同一台主机中NFS和Samba服务设定网络优先级:

1.net_prio管控器并未编译进kernel, 使用时必须手动装载该模块:
~]#modprobe netprio_cgroup 2.将net_prio子系统附加到/cgroup/net_prio 的cgroup 中:
~]#mkdir sys/fs/cgroup/net_prio
~]#mount -t cgroup -o net_prio none sys/fs/cgroup/net_prio 3.为各项服务创建cgroup:
~]#mkdir sys/fs/cgroup/net_prio/nfs_high
~]#mkdir sys/fs/cgroup/net_prio/samba_low 4.将NFS服务自动移至nfs_high cgroup :
~]#echo "CGROUP_DAEMON="net_prio:nfs_high"" >> /etc/sysconfig/nfs 5.将smbd自动移至samba_low cgroup :
~]#echo "*:smbd net_prio samba_low" >> /etc/cgrules.conf 6.启动cgred服务
~]#systemctl start cgred 7.设定NFS和samba的优先级:
~]#echo "eth1 1" >/sys/fs/cgroup/net_prio/samba_low/net_prio.ifpriomap
~]#echo "eth1 10">/sys/fs/cgroup/net_prio/nfs_high/net_prio.ifiomap

  RHEL7的系统资源管理工具很丰富, 在RHEL7中仍然保留了早期版本的libcgroup数据包, 仍然可以启用cgconfig服务实现系统资源的层级管理.

  后续更新RHEL7中资源管理的各种可调参数.

RHEL7系统管理之资源管理的更多相关文章

  1. RHEL7系统管理常用工具

    RHEL7提供大量系统管理工具,简要记录一下各工具的作用,后续再详细说明用法. 工具 描述 /proc linux的内存镜像目录./proc/sys目录下的文件能被临时修改,从而改变linux内核参数 ...

  2. RHEL7系统管理之网络管理

    1. RHEL7的网络介绍 在RHEL7中, NetworkManager 提供的默认联网服务是一个动态网络控制和配置守护进程, 支持ifcfg类型的配置文件. NetworkManager 可用于连 ...

  3. RHEL7系统管理之内核管理

    1. Kdump工具 Kdump的工作机制是在内核崩溃时, 通过kexec 工具由BIOS启动一个备用内核, 由备用内核执行一系列任务,保存内存中崩溃内核的状态, 供后续故障分析用. 本文默认AMD或 ...

  4. 2014年4月底至5月初51Aspx源码发布详情

    精灵豆会员管理系统源码  2014-4-21 [VS2010]功能介绍:精灵豆会员管理系统业务管理平台采用微软选进的C#语言开发,采用大型数据库,具有比较高的执行效率和高安全性.系统分为消费管理,会员 ...

  5. Solaris系统管理(二)资源管理与网络配置

    上一篇主要总结了Solaris安装后需要进行的一些设置,如ssh,pkgutil管理依赖,vim安装. 这一篇将会对Solaris资源管理与网络配置进行总结. 四 Solaris 系统管理 1,查询总 ...

  6. 管理员技术(一):装机预备技能、安装一台RHEL7虚拟机、使用RHEL7图形桌面、Linux命令行基本操作

    一.装机预备技能 问题: 本例要求安装一台可用的KVM服务器:      1> RHEL与CentOS系统有什么关联?      2> 第2块SCSI硬盘的第3个逻辑分区,Linux如何表 ...

  7. 第十一篇:SOUI系统资源管理

    SOUI资源管理模块 从前篇已经讲到在SOUI中所有资源文件通过一个uires.idx文件进行索引. 这里将介绍在程序中如何引用这些资源文件. 在SOUI系统中,资源文件通过一个统一的接口对象读取: ...

  8. JMX 与系统管理--转

    前言 在 Java 程序的运行过程中,对 JVM 和系统的监测一直是 Java 开发人员在开发过程所需要的.一直以来,Java 开发人员必须通过一些底层的 JVM API,比如 JVMPI 和 JVM ...

  9. DynamicMBean(Java SE 6 新特性: JMX 与系统管理)

    Dynamic MBean 是一种在运行时定义其管理接口的 MBean.例如,配置 MBean 可以通过解析 XML 文件来确定它所公开的属性名称和类型. 任何实现 DynamicMBean 接口的类 ...

随机推荐

  1. Mina的客户端

    (一) package client; import java.net.InetSocketAddress; import java.nio.charset.Charset; import org.a ...

  2. ubuntu16.04 nginx安装

    .gcc.g++依赖库 apt-get install build-essential apt-get install libtool .安装 pcre依赖库(http://www.pcre.org/ ...

  3. LeetCode【第1题】Two Sum

    准备刷一刷LeetCode了. 题目: ''' Given an array of integers, return indices of the two numbers such that they ...

  4. 关于 AXI协议的学习解释说明

    AXI(Advanced eXtensible Interface)是一种总线协议,该协议是ARM公司提出的AMBA(Advanced Microcontroller Bus Architecture ...

  5. fiddler工作原理和设置代理问题

    1,什么是Fiddler Fiddler是一个http协议调试代理工具,它能够记录客户端和服务器之间的所有 HTTP请求,可以针对特定的HTTP请求,分析请求数据.设置断点.调试web应用.修改请求的 ...

  6. elasticsearch java使用

    本文将介绍如何使用java调用elasticsearch的api 1.获取client连接 package com.test.elasticsearch; import java.net.InetAd ...

  7. JS原型与原型链终极讲解

    function Person () { this.name = 'John'; } var person = new Person(); Person.prototype.say = functio ...

  8. MVC初级教程(二)

    演示产品源码下载地址:http://www.jinhusns.com/Products/Download 

  9. 转载:sql用逗号连接多张表对应哪个join?

    http://blog.csdn.net/huanghanqian/article/details/52847835 四种join的区别已老生常谈: INNER JOIN(也可简写为JOIN): 如果 ...

  10. [日常] 编写HTTP接口文档

    一.什么是接口文档?在项目开发中,web项目的前后端分离开发,APP开发,需要由前后端工程师共同定义接口,编写接口文档,之后大家都根据这个接口文档进行开发,到项目结束前都要一直维护.二.为什么要写接口 ...