Je souhaite créer des groupes de contrôle à l'aide de cgroup
name__.
Jusqu'ici j'ai fait ce qui suit:
J'ai installé des paquets:
Sudo apt-get install cgroup-bin cgroup-lite cgroup-tools cgroupfs-mount libcgroup1
Ensuite, j'ai créé le fichier /etc/cgconfig.conf
avec le contenu suivant:
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;
}
}
selon le guide ici , en supposant que le fichier de configuration réside au même emplacement et utilise la même syntaxe sur Ubuntu, comme sur CentOS.
Ensuite, selon ce guide, je dois démarrer le cgconfig service
. J'ai essayé avec:
Sudo service cgconfig restart
Mais, oh non! Un fichier est manquant !:
Failed to restart cgconfig.service: Unit cgconfig.service not found.
Après quelques interrogations et recherches, j'ai essayé:
● cgconfig.service
Loaded: not-found (Reason: No such file or directory)
Active: inactive (dead)
Il semble donc que je n'ai tout simplement aucun service cgconfig sur mon système!
Je l'ai cherché en utilisant:
Sudo aptitude search cgconfig
Cependant, aucun cgconfig
ne doit être trouvé.
Comment puis-je installer cgconfig
sur mon Ubuntu 16.04?
OK, j'ai réussi à faire la même chose que vous, mais avec quelques modifications:
1) J'ai installé les mêmes utilitaires:
Sudo apt-get install cgroup-bin cgroup-lite cgroup-tools cgroupfs-mount libcgroup1
2) J'ai édité des fichiers de conf comme ceci:
/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
/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
Et /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
C'est un exemple, utilisez votre nom d'utilisateur au lieu de [utilisateur]. Vous pouvez ajouter les applications que vous devez limiter et définir si vous souhaitez qu'elles soient limitées en CPU, en mémoire ou les deux.
J'ai modifié la ligne GRUB_CMDLINE_LINUX_DEFAULT
dans /etc/default/grub
:
GRUB_CMDLINE_LINUX_DEFAULT="cgroup_enable=memory swapaccount=1"
Mise à jour:
Sudo update-grub
3) et enfin redémarrer pour appliquer les modifications.
Et c'est comme ça que ça fonctionne. Auparavant, j’avais de nombreux MOO multitâches - avec navigateur Chrome, clémentine, texte sublime et autres applications utilisant beaucoup de ressources -, ils fonctionnent à présent de manière fluide et je peux mieux effectuer plusieurs tâches à la fois.
J'espère vraiment que cela pourra aider les autres.
Utilise actuellement buntu 16.04 LTS avec Intel Dual Core 2.6 Ghz et 4 Gb. RAM.
J'ai fait face au même problème. Il semble qu'il n'y ait pas de service intégré dans les distributions Ubuntu actuelles pour charger les fichiers de configuration cgroup.
Vous trouverez quelques exemples de scripts d’initiation (cassés?) À /usr/share/doc/outils-cgroup/examples/cgconfig et /usr/share/doc/cgroup-tools/examples/cgred .
Pour charger manuellement les fichiers de configuration que vous pouvez utiliser
# Loads /etc/cgconfig.conf
cgconfigparser -l /etc/cgconfig.conf
# Loads /etc/cgrules.conf
cgrulesengd -vvv --logfile=/var/log/cgrulesengd.log
En tant que solution d'un homme pauvre, j'ai moi-même écrit un script d'initialisation qui charge les deux fichiers au démarrage du système.
#!/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 $?
Enregistrez ce fichier sous /etc/init.d/cgconf et installez-le à l'aide de
# 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