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

  • 相关阅读:
    centos6 vps部署rails
    初始设置ubuntu 16.04 Vps部署rails
    自己买的书籍
    linux mint 18.2 install erlang
    Bunder: What does :require => nil in Gemfile mean?
    javascript箭头函数
    SharpGL学习笔记(一) 平台构建与Opengl的hello World
    动力学仿真引擎ODE的学习笔记,C#演示(一)
    设计模式之 面向对象的养猪厂的故事,C#演示(二)
    设计模式之 面向对象的养猪厂的故事,C#演示(一)
  • 原文地址:https://www.cnblogs.com/hugetong/p/8819424.html
Copyright © 2011-2022 走看看