RHEL7系统管理之资源管理
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系统管理之资源管理的更多相关文章
- RHEL7系统管理常用工具
RHEL7提供大量系统管理工具,简要记录一下各工具的作用,后续再详细说明用法. 工具 描述 /proc linux的内存镜像目录./proc/sys目录下的文件能被临时修改,从而改变linux内核参数 ...
- RHEL7系统管理之网络管理
1. RHEL7的网络介绍 在RHEL7中, NetworkManager 提供的默认联网服务是一个动态网络控制和配置守护进程, 支持ifcfg类型的配置文件. NetworkManager 可用于连 ...
- RHEL7系统管理之内核管理
1. Kdump工具 Kdump的工作机制是在内核崩溃时, 通过kexec 工具由BIOS启动一个备用内核, 由备用内核执行一系列任务,保存内存中崩溃内核的状态, 供后续故障分析用. 本文默认AMD或 ...
- 2014年4月底至5月初51Aspx源码发布详情
精灵豆会员管理系统源码 2014-4-21 [VS2010]功能介绍:精灵豆会员管理系统业务管理平台采用微软选进的C#语言开发,采用大型数据库,具有比较高的执行效率和高安全性.系统分为消费管理,会员 ...
- Solaris系统管理(二)资源管理与网络配置
上一篇主要总结了Solaris安装后需要进行的一些设置,如ssh,pkgutil管理依赖,vim安装. 这一篇将会对Solaris资源管理与网络配置进行总结. 四 Solaris 系统管理 1,查询总 ...
- 管理员技术(一):装机预备技能、安装一台RHEL7虚拟机、使用RHEL7图形桌面、Linux命令行基本操作
一.装机预备技能 问题: 本例要求安装一台可用的KVM服务器: 1> RHEL与CentOS系统有什么关联? 2> 第2块SCSI硬盘的第3个逻辑分区,Linux如何表 ...
- 第十一篇:SOUI系统资源管理
SOUI资源管理模块 从前篇已经讲到在SOUI中所有资源文件通过一个uires.idx文件进行索引. 这里将介绍在程序中如何引用这些资源文件. 在SOUI系统中,资源文件通过一个统一的接口对象读取: ...
- JMX 与系统管理--转
前言 在 Java 程序的运行过程中,对 JVM 和系统的监测一直是 Java 开发人员在开发过程所需要的.一直以来,Java 开发人员必须通过一些底层的 JVM API,比如 JVMPI 和 JVM ...
- DynamicMBean(Java SE 6 新特性: JMX 与系统管理)
Dynamic MBean 是一种在运行时定义其管理接口的 MBean.例如,配置 MBean 可以通过解析 XML 文件来确定它所公开的属性名称和类型. 任何实现 DynamicMBean 接口的类 ...
随机推荐
- list转换为树结构--递归
public static JSONArray treeMenuList(List<Map<String, Object>> menuList, Object parentId ...
- MyEclipse *的下载
找到MyEclipse的各种历史版本下载页面 : MyEclipse官方中文网 欢迎大家,加入我的微信公众号:大数据躺过的坑 人工智能躺过的坑 同时,大家可以关注我的个人博客 ...
- 编写代码:ATM的登陆界面(用户验证、主菜单的选择) 查询-- 存款-- 取款-- 退出
#include <stdio.h>#include <windows.h>int main (void){ int password,one,two,money1=10 ...
- linux之tmpfs
1.概述 tmpfs是ramfs的衍生品,ramfs是基于RAM的文件系统,不能使用swap空间:tmpfs可以动态释放空间.可以使用swap空间.ramfs不能控制使用内存的大小容易使内存爆掉:而t ...
- "setItem@[native code] logging run flush"
safari 中出现 "setItem@[native code] logging run flush" 此问题出现在 6s plus ios系统为10.2 时, safari打开 ...
- oracle = : := 和变量绑定 oracle通配符和运算符
这篇是7788凑的:":="是赋值语句 如: l_name :='sky';..."=" 是判断是否相等. 如: if 1=1 then...":&q ...
- 常用工具说明--jsdoc 前端文档输出工具
1.利用npm安装jsdoc模块 npm install jsdoc -g 2.由于jsdoc默认的生成文档模板不好看,可以下载一套好看些的模板,如 jaguar.js 下载地址:https:// ...
- 添加Access-Control-Allow-Origin主机头, 授权资源跨站访问
时间 2014-09-24 22:02:48 All by Neil 原文 https://blog.byneil.com/添加access-control-allow-origin主机头-授权资 ...
- BG.Hadoop.Master
1. 安装JDK JDK安装包复制到/opt文件夹 cd /opt rpm -ivh jdk-8u121-linux-x64.rpm vim /etc/profile 增加 JAVA_HOME=/us ...
- 【手记】解决启动SQL Server Management Studio 17时报Cannot find one or more components...的问题
刚装好SSMS 17.1准备体验,弹出: 一番搜索,普遍办法都是安装VS2015独立shell.删除某个注册表项什么的,没用,首先这个shell我是装了的,然后也没有那个注册表项.我自己尝试过重装sh ...