Les bases
RHEL7 déplace les paramètres de gestion des ressources du niveau du processus au niveau de l'application en liant le système de hiérarchies de groupes de contrôle à l'arborescence des unités systemd. L'ancienne façon de configurer cgroup, en éditant plusieurs /etc/cg*.conf est toujours disponible mais n'est plus recommandé.
Systemd fournit trois types d'unités (slice , portée , service ) qui sont utilisés à des fins de contrôle des ressources.
Gérer le groupe de contrôle avec l'unité de service de systemd
1. Personnalisez une unité de service pour votre service dans /etc/systemd/system , si votre service n'a pas d'unité de service systemd. Vous devez créer un script de démarrage/arrêt pour gérer votre service.
# cat /etc/systemd/system/mytask.service [Unit] Description= ** After=remote-fs.target nss-lookup.target [Service] ExecStart=/root/start_process.sh ExecStop=/root/stop_process.sh [Install] WantedBy=multi-user.target
2. Contrôlez la ressource via la ligne de commande (prenez le contrôle du quota de processeur 60% comme exemple)
# systemctl set-property mytask CPUQuota=60%
Par défaut, il ne prend en charge que les attributs suivants via la commande set-property.
AccuracySec= CPUQuota= KillMode= LimitLOCKS= LimitRTPRIO= SendSIGHUP= BlockIOAccounting= CPUShares= KillSignal= LimitMEMLOCK= LimitRTTIME= SendSIGKILL= BlockIODeviceWeight= DefaultDependencies= LimitAS= LimitMSGQUEUE= LimitSIGPENDING= User= BlockIOReadBandwidth= DeviceAllow= LimitCORE= LimitNICE= LimitSTACK= WakeSystem= BlockIOWeight= DevicePolicy= LimitCPU= LimitNOFILE= MemoryAccounting= BlockIOWriteBandwidth= Environment= LimitDATA= LimitNPROC= MemoryLimit= CPUAccounting= Group= LimitFSIZE= LimitRSS= Nice=
3. Si vous souhaitez définir l'attribut qui n'est pas répertorié comme ci-dessus, vous pouvez utiliser la méthode suivante.
# echo 70 > /sys/fs/cgroup/memory/system.slice/httpd.service/memory.swappiness
Ou contrôlez la ressource en modifiant les fichiers de l'unité de service
# cat /etc/systemd/system/mytask.service [Unit] Description= ** After=remote-fs.target nss-lookup.target [Service] CPUQuota=90% MemoryLimit=1500000 ExecStartPre=/bin/bash -c '/bin/echo 70 > /sys/fs/cgroup/memory/system.slice/httpd.service/memory.swappiness' #ExecStartPost ExecStart=/root/start_process.sh ExecStop=/root/stop_process.sh [Install] WantedBy=multi-user.target
4. Rechargez la configuration du gestionnaire systemd et démarrez votre service
# systemctl daemon-reload # systemctl start mytask