Я хочу создать некоторое использование контрольных групп cgroup
.
До сих пор я сделал следующее:
Я установил некоторые пакеты:
sudo apt-get install cgroup-bin cgroup-lite cgroup-tools cgroupfs-mount libcgroup1
Затем я создал /etc/cgconfig.conf
файл со следующим содержанием:
mount {
cpuset = /cgroup/cpuset;
cpu = /cgroup/cpu;
cpuacct = /cgroup/cpuacct;
memory = /cgroup/memory;
devices = /cgroup/devices;
freezer = /cgroup/freezer;
net_cls = /cgroup/net_cls;
ns = /cgroup/ns;
blkio = /cgroup/blkio;
}
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 {
cpu.shares = 200;
}
memory {
memory.limit_in_bytes = 128m;
}
}
согласно руководству здесь, принятию, что файл конфигурации находится в том же местоположении и использует тот же синтаксис на Ubuntu, поскольку это использует на CentOS.
Затем согласно тому руководству я должен запустить cgconfig service
. Я попробовал:
sudo service cgconfig restart
Но, о нет! Файл отсутствует!:
Failed to restart cgconfig.service: Unit cgconfig.service not found.
После некоторого удивления и поиска вокруг, я попробовал:
● cgconfig.service
Loaded: not-found (Reason: No such file or directory)
Active: inactive (dead)
Таким образом, кажется, что у меня просто нет cgconfig сервиса на мою систему!
Я искал его использование:
sudo aptitude search cgconfig
Однако нет cgconfig
должен быть найден.
Как я могу установить cgconfig
на моей Ubuntu 16.04?
Я столкнулся с той же проблемой. Похоже, что нет никакого встроенного сервиса в текущих дистрибутивах Ubuntu для загрузки cgroup файлов конфигурации.
Вы найдете некоторых (поврежденный?) пример init сценарии в/usr/share/doc/cgroup-tools/examples/cgconfig и/usr/share/doc/cgroup-tools/examples/cgred.
Для ручной загрузки файлов конфигурации, можно использовать
# Loads /etc/cgconfig.conf
cgconfigparser -l /etc/cgconfig.conf
# Loads /etc/cgrules.conf
cgrulesengd -vvv --logfile=/var/log/cgrulesengd.log
Как решение бедного человека я записал мне init сценарий, который загружает оба файла на системном запуске.
#!/bin/sh
### BEGIN INIT INFO
# Provides: cgconf
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Should-Start:
# Should-Stop:
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Configures CGroups
### END INIT INFO
start_service() {
if is_running; then
echo "cgrulesengd is running already!"
return 1
else
echo "Processing /etc/cgconfig.conf..."
cgconfigparser -l /etc/cgconfig.conf
echo "Processing /etc/cgrules.conf..."
cgrulesengd -vvv --logfile=/var/log/cgrulesengd.log
return 0
fi
}
stop_service() {
if is_running; then
echo "Stopping cgrulesengd..."
pkill cgrulesengd
else
echo "cgrulesengd is not running!"
return 1
fi
}
status() {
if pgrep cgrulesengd > /dev/null; then
echo "cgrulesengd is running"
return 0
else
echo "cgrulesengd is not running!"
return 3
fi
}
is_running() {
status >/dev/null 2>&1
}
case "${1:-}" in
start)
start_service
;;
stop)
stop_service
;;
status)
status
;;
*)
echo "Usage: /etc/init.d/cgconf {start|stop|restart|status}"
exit 2
;;
esac
exit $?
Сохраните этот файл в/etc/init.d/cgconf и установите его использование
# make the script executable
chmod 755 /etc/init.d/cgconf
# register the service
update-rc.d cgconf defaults
# start the service
service cgconf start
# check the status
service cgconf status
Хорошо, я управлял мной, чтобы сделать то же, которое Вы сделали, но с некоторыми изменениями:
1) Я установил те же утилиты:
sudo apt-get install cgroup-bin cgroup-lite cgroup-tools cgroupfs-mount libcgroup1
2) Я отредактировал conf файлы как это:
/etc/init/cgroup-lite.conf
description "mount available cgroup filesystems"
author "Serge Hallyn <serge.hallyn@canonical.com>"
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
/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
И /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
Это - пример, используйте свое имя пользователя вместо [пользователя]. Можно добавить приложения, которые необходимо ограничить и определить, хотите ли Вы, чтобы они были ЦП - память - или оба ограниченные.
Я отредактировал GRUB_CMDLINE_LINUX_DEFAULT
строка в /etc/default/grub
:
GRUB_CMDLINE_LINUX_DEFAULT="cgroup_enable=memory swapaccount=1"
Обновление его:
sudo update-grub
3) И наконец перезагрузка для применения изменений.
И именно так у меня есть эта работа. Перед этим у меня был частый OOMs с многозадачностью - с браузером хрома, клементином, сублимированным текстом и другими приложениями с помощью большого количества ресурсов - теперь они работают гладко, и я могу работать в многозадачном режиме лучше.
Я действительно надеюсь, что это может помочь другим.
В настоящее время с помощью Ubuntu 16.04 LTS с Intel Dual Core 2.6 Ghz и 4 Гбита. RAM.