zoukankan      html  css  js  c++  java
  • [daily][cgroup] 使用cgroup限制进程的CPU占用

    参考:

    https://segmentfault.com/a/1190000008323952

    1。 找到cgroup设置的地方。

    [root@D128 ~]# mount -l |grep cpu
    cgroup on /sys/fs/cgroup/cpuset type cgroup (rw,nosuid,nodev,noexec,relatime,cpuset)
    cgroup on /sys/fs/cgroup/cpu,cpuacct type cgroup (rw,nosuid,nodev,noexec,relatime,cpuacct,cpu)
    [root@D128 ~]# cd /sys/fs/cgroup/cpu,cpuacct/
    [root@D128 cpu,cpuacct]# mkdir nlb
    [root@D128 cpu,cpuacct]# cd nlb/
    [root@D128 nlb]# ls
    cgroup.clone_children  cgroup.procs  cpuacct.usage         cpu.cfs_period_us  cpu.rt_period_us   cpu.shares  notify_on_release
    cgroup.event_control   cpuacct.stat  cpuacct.usage_percpu  cpu.cfs_quota_us   cpu.rt_runtime_us  cpu.stat    tasks
    [root@D128 nlb]# 

    2.  关联到线程。

    [root@D128 nlb]# pidof qemu-system-x86_64
    7429
    [root@D128 nlb]# echo 7429 > cgroup.procs 
    [root@D128 nlb]# cat cgroup.procs 
    7429
    [root@D128 nlb]# 

    3.  限制使用一颗CPU的25%资源

     cpu.cfs_period_us和cpu.cfs_quota_us来限制该组中的所有进程在单位时间里可以使用的cpu时间。这里的cfs是完全公平调度器的缩写。cpu.cfs_period_us就是时间周期(微秒),默认为100000,即百毫秒。cpu.cfs_quota_us就是在这期间内可使用的cpu时间(微秒),默认-1,即无限制。(cfs_quota_us是cfs_period_us的两倍即可限定在双核上完全使用)。

    [root@D128 nlb]# echo 50000 > cpu.cfs_period_us 
    [root@D128 nlb]# echo 12500 > cpu.cfs_quota_us 
    [root@D128 nlb]# cat cpu.cfs_period_us 
    50000
    [root@D128 nlb]# cat cpu.cfs_quota_us 
    12500

    4.  使用top查看

    [root@D128 nlb]# echo 50000 > cpu.cfs_period_us 
    [root@D128 nlb]# echo 12500 > cpu.cfs_quota_us 
    [root@D128 nlb]# cat cpu.cfs_period_us 
    50000
    [root@D128 nlb]# cat cpu.cfs_quota_us 
    12500

    5.  演示脚本

    qemu-system-x86_64 -enable-kvm xxx yyy &
    PID=$?
    echo $PID > /sys/fs/cgroup/cpu,cpuacct/nlb/cgroup.procs echo 50000 > /sys/fs/cgroup/cpu,cpuacct/nlb/cpu.cfs_period_us echo 50000 > /sys/fs/cgroup/cpu,cpuacct/nlb/cpu.cfs_quota_us

    6.  移除cgroup

    要把进程移出控制组,把 pid 写入到根 cgroup 的 tasks 文件即可。因为每个进程都属于且只属于一个 cgroup,加入到新的 cgroup 后,原有关系也就解除了。要删除一个 cgroup,
    可以用 rmdir 删除相应目录。不过在删除前,必须先让其中的进程全部退出,对应子系统的资源都已经释放,否则是无法删除的。

    https://xiezhenye.com/2013/10/linux-cgroups-%E6%A6%82%E8%BF%B0.html

  • 相关阅读:
    [转发]深入理解git,从研究git目录开始
    iOS系统网络抓包方法
    charles抓包工具
    iOS多线程中performSelector: 和dispatch_time的不同
    IOS Core Animation Advanced Techniques的学习笔记(五)
    IOS Core Animation Advanced Techniques的学习笔记(四)
    IOS Core Animation Advanced Techniques的学习笔记(三)
    IOS Core Animation Advanced Techniques的学习笔记(二)
    IOS Core Animation Advanced Techniques的学习笔记(一)
    VirtualBox复制CentOS后提示Device eth0 does not seem to be present的解决方法
  • 原文地址:https://www.cnblogs.com/hugetong/p/8819424.html
Copyright © 2011-2022 走看看