Nozioni di base
RHEL7 sposta le impostazioni di gestione delle risorse dal livello del processo al livello dell'applicazione collegando il sistema delle gerarchie cgroup con l'albero delle unità systemd. Il vecchio modo di configurare cgroup, modificando diversi /etc/cg*.conf i file sono ancora disponibili ma non più consigliati.
Systemd fornisce tre tipi di unità (slice , ambito , servizio ) utilizzati ai fini del controllo delle risorse.
Gestione di cgroup con l'unità di servizio di systemd
1. Personalizza un'unità di servizio per il tuo servizio in /etc/systemd/system , se il tuo servizio non dispone di un'unità di servizio systemd. Devi creare uno script di avvio/arresto per gestire il tuo servizio.
# 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. Controlla la risorsa tramite riga di comando (prendere il controllo della quota della CPU 60% come esempio)
# systemctl set-property mytask CPUQuota=60%
Per impostazione predefinita, supporta solo i seguenti attributi tramite il comando 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. Se si desidera impostare l'attributo che non è elencato come sopra, è possibile utilizzare il metodo seguente.
# echo 70 > /sys/fs/cgroup/memory/system.slice/httpd.service/memory.swappiness
Oppure controlla la risorsa modificando i file dell'unità di servizio
# 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. Ricarica la configurazione di systemd manager e avvia il tuo servizio
# systemctl daemon-reload # systemctl start mytask