Es gibt viele ähnliche Fragen, aber keine hilft mir bei meinem Problem.
Ich habe Ubuntu 11.10 auf dem Server (es ist Desktop-Version). Ich habe eine laufende Website. Es gibt einen Prozess, der sehr wichtig ist, aber nicht mit hoher Priorität ausgeführt werden muss. Ich möchte dauerhaft CPU - Auslastung begrenzen für Prozess , nicht für Benutzer. Dieser Prozess wird von der exec-Funktion ausgeführt (es ist eine PHP-Funktion, kein Systemprozess).
Ich sehe also 2 Optionen: 1. Füge bei jeder Ausführung einer Funktion eine Art Limit hinzu. 2. Beschränken Sie die CPU-Auslastung für diesen Prozess dauerhaft.
Ich habe versucht, "nice" und cpulimit zu verwenden, aber nichts scheint zu funktionieren. Nice hat keine Wirkung und cpulimit (mit -e) sagt: "no target process found".
Ich bin ein ziemlicher Anfänger, also nehmen Sie bitte an, dass ich fast nichts weiß.
cgsnapshot -s
, um die Informationen abzurufen, ohne die Konfigurationsdatei manuell zu schreiben. Letzteres wird nicht empfohlen.Antworten:
In Ermangelung der angeforderten Details ...
Hier ist, wie ich cgroups auf Ubuntu verwende.
In diesem Beitrag müssen Sie die Variable "$ USER" an den Benutzer anpassen, der den Prozess ausführt
Ich habe Informationen für den Speicher hinzugefügt, außerdem wird dies eine FAQ sein. Wenn Sie sie nicht benötigen, verwenden Sie sie nicht.
1) Installieren
cgroup-bin
2) Neustart. cgroups befindet sich jetzt unter
/sys/fs/cgroup
3) Machen Sie eine cgroup für Ihren Benutzer (der Eigentümer des Prozesses)
4) Ihr Benutzer kann Ressourcen verwalten. Standardmäßig erhalten Benutzer 1024 CPU-Einheiten (Freigaben). Um die CPU-Auslastung auf ca. 10% zu begrenzen, wird der Speicher in Byte angegeben.
5) Starte deinen Prozess (ändere exec auf cgexec)
Aufbau
Vorausgesetzt, Gruppen arbeiten für Sie;)
Bearbeiten Sie
/etc/cgconfig.conf
, fügen Sie in Ihrer benutzerdefinierten Gruppe hinzuFügen Sie in Ihrer Gruppe hinzu. Ändern Sie erneut $ USER in den Benutzernamen, dem der Prozess gehört.
Sie können auch Gruppen angeben
gid=$GROUP
. /Etc/cgconfig.conf ist gut kommentiert.Führen Sie nun Ihren Prozess erneut mit aus
cgexec -g cpu:$USER command <options>
Sie können Ihren Prozess (nach PID) in sehen
/sys/fs/cgroup/cpu/$USER/tasks
Beispiel
Weitere Informationen finden Sie unter: http://docs.redhat.com/docs/en-US/Red_Hat_Enterprise_Linux/6/html/Resource_Management_Guide/
quelle