Die Grundlagen
RHEL7 verschiebt die Ressourcenverwaltungseinstellungen von der Prozessebene auf die Anwendungsebene, indem das System der cgroup-Hierarchien mit dem systemd-Einheitenbaum verknüpft wird. Die alte Art, cgroup zu konfigurieren, indem mehrere /etc/cg*.conf bearbeitet werden Dateien sind noch verfügbar, werden aber nicht mehr empfohlen.
Systemd bietet drei Unit-Typen (slice , Geltungsbereich , Dienst ), die zum Zweck der Ressourcenkontrolle verwendet werden.
Handhabung der cgroup mit der Diensteinheit von systemd
1. Passen Sie eine Service-Unit für Ihren Service in /etc/systemd/system an , wenn Ihr Dienst keine systemd-Diensteinheit hat. Sie müssen ein Start-/Stopp-Skript erstellen, um Ihren Dienst zu verwalten.
# 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. Steuern Sie die Ressource über die Befehlszeile (übernehmen Sie die Kontrolle über die CPU-Quote 60% als Beispiel)
# systemctl set-property mytask CPUQuota=60%
Standardmäßig unterstützt es nur die folgenden Attribute über den Befehl 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. Wenn Sie das oben nicht aufgeführte Attribut festlegen möchten, können Sie die folgende Methode verwenden.
# echo 70 > /sys/fs/cgroup/memory/system.slice/httpd.service/memory.swappiness
Oder steuern Sie die Ressource, indem Sie die Service-Unit-Dateien ändern
# 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. Laden Sie die Systemd Manager-Konfiguration neu und starten Sie Ihren Dienst
# systemctl daemon-reload # systemctl start mytask