| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 系统运维 -> linux进程资源控制-cgroup -> 正文阅读 |
|
[系统运维]linux进程资源控制-cgroup |
????????Linux CGroup全称Linux Control Group, 是Linux内核的一个功能,用来限制,控制与分离一个进程组群的资源(如CPU、内存、磁盘输入输出等)。防止进程间不利的资源抢占。 ? ? ? ? 一般在较大的公司中会经常用到,例如多个数据库跑在一个物理机上,一般按照需要对不同的数据库进行资源的分配和限制,避免单个库的消耗增加影响其他数据库的性能。 1、概念????????
???????? ????????相互关系:
? ?????????当你的cgroup?关联了哪些subsystem?,那这个cgroup?目录下就会有对应subsystem?的参数配置文件,可以通过这些文件对对应的资源进行限制 ? ? ? ? cgroup目录下的tasks文件里面可以添加你想要进行资源限制管理的进程的PID ? 1.1、subsystem????????centos支持的subsystem如下
?1.2、hierarchy????????? ????????创建
? ? ? ? mount -t cgroup可以看到新增的 ? ? ????????cg_t1
? 1.3、cgroup????????cgroup管理的是具体的 ? ? ? ? ? 如果需要创建cgroup,在 ? ? ? ? 创建出来的目录会自动集成父目录的 ? ? ? ? 例如,我在如/cg_t1下面创建cg_t1_2,cg_t1_2下会自动生成下面文件
1.4、准则????????1.一个hierarchy可以有多个 subsystem (mount 的时候hierarchy可以attach多个subsystem) ????????2.一个已经被挂载的 subsystem 只能被再次挂载在一个空的 hierarchy 上 (已经mount一个subsystem的hierarchy不能挂载一个已经被其它hierarchy挂载的subsystem) ? ????????3.每个task只能在一同个hierarchy的唯一一个cgroup里(不能在同一个hierarchy下有超过一个cgroup的tasks里同时有这个进程的pid) ????????4.子进程在被fork出时自动继承父进程所在cgroup,但是fork之后就可以按需调整到其他cgroup ? 2、小实验(限制进程CPU消耗)2.1、创建一个死循环的shell脚本
????????然后运行起来,top命令可以查看到这个shell脚本进程的PID的18024,CPU消耗为100% ? ?2.2、给进程添加cpu消耗限制? ? ? ? ?我们在原有的/sys/fs/cgroup/cpu下面创建一个新的cgroup为cpu_t,其目录下文件如下 ????????然后 ????????echo 20000 >cpu./sys/fs/cgroup/cpu/cpu_t/cpu.cfs_quota_us【将该cgroup的cpu消耗限制为20%】 ????????echo 18024>> /sys/fs/cgroup/cpu/cpu_t/tasks 【将进程纳入该cgroup限制管理】 ? ? ? ? 这个时候再用top命令查看? 就会发现这个shell脚本进程的cpu消耗变成了20%,限制起了作用 ? 3、常见操作
3.1、创建一个hierarchy(挂载subsystem)3.1.1、命令行? mount -t cgroup -o cpuset,memory?cpu_and_mem /cg_t1 3.1.2、配置文件语法如下: ? mount { 举例: ? mount {
3.2、新建删除cgroup3.1.1、命令行:
3.1.2、配置文件语法如下: ·name指定cgroup的名称 ·permissions,可选项,指定cgroup对应的挂载点文件系统的权限(perm参数) ·controller:子系统的名称 ·param name和param value:子系统下具体的某一个属性及其属性值 group <name> { ? ? <controller> { ? ? ? ? ? <param name> = <param value>; 举例: ? group?cg_t1_1 { 3.3、权限管理3.3.1、命令行chown改变文件属主权限就可以 如: ????????chown root:root /cg_t1/cg_t1_2/sql/* ????????chown root:root /cg_t1/cg_t1_2/sql/tasks 3.3.2、配置文件在配置文件中对应的cgroup下面配置prem 语法如下 perm {
task {
uid = <task user>;
gid = <task group>;
}
admin {
uid = <admin name>;
gid = <admin group>;
}
}
举例: ? group cg_t1_2?{ 3.4、设置cgroup下的参数3.4.1·命令行语法 echo value > path_to_cgroup/parameter 举例 echo 20000 >cpu./sys/fs/cgroup/cpu/cpu_t/cpu.cfs_quota_us 3.4.2、配置文件在对应的group下面添加,如 group?cg_t1_1 { 3.5、添加task(管理进程)3.5.1、命令行语法 echo pid > path_to_cgroup/tasks 举例 echo 13445 > cpu./sys/fs/cgroup/cpu/cpu_t/tasks 3.5.2、配置文件通过/etc/cgrules.conf 对特定服务限制 这里是对用户或者用户组进行限制 户或@组:命令 子系统 cgroup名称 如: sqladmin? ? cpu? ? cg_t1_1 ? ? 欢迎关注我的公众号:龙叔运维 持续分享运维经验 ? ? |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/15 18:38:43- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |