是否可以在不增加 CPU 消耗的情况下进行修补?

是否可以在不增加 CPU 消耗的情况下进行修补?

我正在使用无人值守升级来修补大约 300 台 ubuntu (16.04 LTS) 机器(实际上是网络设备),其中一些是运行在 ESXi、azure 和 AWS 上的 1 CPU VM,其他则是裸机四核 Atom IOT 设备。我在裸机上没有遇到过这种问题,但在 VM 上,它们的功率刚好足以完成它们需要做的事情,当机器自行修补时,我们的 SNMP 监控会变得混乱,我们会得到高 CPU 峰值、交换内存警报等。

除了想办法抑制这些警报(这不是我要问的),有没有办法让 renice 补丁程序慢慢来?我不会介意花 4 个小时来修补,也就是说,在无人值守的情况下(如果我直接用 ansible 或 apt 启动它,我不希望修补过程如此缓慢)。

答案1

我认为这回答包含您正在寻找的所有内容:

好的,我尝试做了和你一样的事情,但做了一些改变:

1)我安装了相同的实用程序:

sudo apt-get install cgroup-bin cgroup-lite cgroup-tools cgroupfs-mount libcgroup1

2)我编辑了conf文件如下:

sudo -H gedit /etc/init/cgroup-lite.conf

description "mount available cgroup filesystems"
author "Serge Hallyn <[email protected]>"

start on mounted MOUNTPOINT=/sys/fs/cgroup

pre-start script
test -x /bin/cgroups-mount || { stop; exit 0; }
test -d /sys/fs/cgroup || { stop; exit 0; }
/bin/cgroups-mount
cgconfigparser -l /etc/cgconfig.conf
end script

post-stop script
if [ -x /bin/cgroups-umount ]
then
    /bin/cgroups-umount
fi
end script

sudo -H gedit /etc/cgconfig.conf

# Since systemd is working well, this section may not be necessary.
# Uncomment if you need it
#
# mount {
# cpuacct = /cgroup/cpuacct;
# memory = /cgroup/memory;
# devices = /cgroup/devices;
# freezer = /cgroup/freezer;
# net_cls = /cgroup/net_cls;
# blkio = /cgroup/blkio;
# cpuset = /cgroup/cpuset;
# cpu = /cgroup/cpu;
# }

group limitcpu{
  cpu {
    cpu.shares = 400;
  }
}

group limitmem{
  memory {
    memory.limit_in_bytes = 512m;
  }
}

group limitio{
  blkio {
    blkio.throttle.read_bps_device = "252:0         2097152";
  }
}

group browsers {
    cpu {
#       Set the relative share of CPU resources equal to 25%
    cpu.shares = "256";
}
memory {
#       Allocate at most 512M of memory to tasks
        memory.limit_in_bytes = "512m";
#       Apply a soft limit of 512 MB to tasks
        memory.soft_limit_in_bytes = "384m";
    }
}

group media-players {
    cpu {
#       Set the relative share of CPU resources equal to 25%
        cpu.shares = "256";
    }
    memory {
#       Allocate at most 256M of memory to tasks
        memory.limit_in_bytes = "256m";
#       Apply a soft limit of 196 MB to tasks
        memory.soft_limit_in_bytes = "128m";
    }
}

cgconfigparser -l /etc/cgconfig.conf

sudo -H gedit /etc/cgrules.conf

user:process                                         subsystems   group
[user]:/usr/lib/chromium-browser/chromium-browser   cpu,memory      browsers
[user]:/usr/bin/clementine                        cpu,memory     media-players

注意:本节需要更新/usr/bin/apt

这是一个例子,使用您的用户名而不是 [用户]。您可以添加需要限制的应用程序,并定义是否希望它们受到 CPU、内存或两者的限制。

我编辑了以下GRUB_CMDLINE_LINUX_DEFAULT/etc/default/grub

GRUB_CMDLINE_LINUX_DEFAULT="cgroup_enable=memory swapaccount=1"

正在更新:

sudo update-grub

3)最后重新启动以应用更改。

这就是我让它工作的方式。在此之前,我在多任务处理时经常遇到 OOM - 使用 chromium-browser、clementine、sublime-text 和其他使用大量资源的应用程序 - 现在它们运行顺畅,我可以更好地进行多任务处理。


其他cgroups资源:

相关内容