GNU/Linux >> Tutoriels Linux >  >> Cent OS

Comment contrôler la ressource (cgroup) avec systemd pour le groupe de processus utilisateur dans CentOS/RHEL 7

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


Cent OS
  1. CentOS / RHEL 7 :Guide du débutant sur systemd

  2. CentOS / RHEL 7 :Comment activer telnet pour un groupe d'utilisateurs

  3. Comment définir children-max pour le service udev dans CentOS/RHEL 7

  4. Comment régénérer initramfs et vmlinuz pour Rescue Kernel avec le noyau actuel dans CentOS/RHEL 7

  5. Comment limiter certaines ressources de mémoire utilisateur sur CentOS/RHEL à l'aide de cgroup

Comment installer et configurer un exemple de service avec xinetd sur RHEL 8 / CentOS 8 Linux

Comment ajouter un utilisateur à un groupe sur RHEL 8 / CentOS 8

Comment démarrer le service au démarrage avec RHEL 8 / CentOS 8 Linux

Comment activer le quota de disque d'utilisateur et de groupe sur CentOS 7 / RHEL 7

CentOS / RHEL 7 :Comment vérifier l'état d'un service à l'aide de systemd

Comment déboguer le processus de démarrage systemd dans CentOS/RHEL 7 et 8