zoukankan      html  css  js  c++  java
  • 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=600 MenoryLimit=500M
    利用 --runtime 选项使设定为临时更改:
    systemctl set-property --runtime httpd.service CPUShares=600 MemoryLimit=500M

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

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

      为同一台主机中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中资源管理的各种可调参数.

  • 相关阅读:
    ide 安装eval reset插件 Pycharm 永久破解
    Centos7.9安装RabbitMQ
    Linux环境下安装Centos7.9时没有图形界面的解决办法
    JS,对部分值base64解码
    consul 配置备份
    AutoMapper后遇到的“Missing map”与“Missing type map configuration”问题
    osg绘制圆柱体
    IfcFlowMovingDevice
    opencv absdiff
    IfcFlowMovingDeviceType
  • 原文地址:https://www.cnblogs.com/qiyunshe-NSD1805/p/9588241.html
Copyright © 2011-2022 走看看