Kann ich die CPU-Auslastung einer einzelnen Anwendung begrenzen?

16

Gibt es eine Möglichkeit, ClamScan davon abzuhalten, meine Server-CPU zu fressen?

Pitto
quelle

Antworten:

16

Nur als Alternative zu cpulimit:

Sie können clamscan mit dem Befehl nice starten, z

nice -n 19 clamscan.

Siehe man nicefür weitere Einzelheiten.

Es ist nicht begrenzt die CPU, aber es hat die Priorität geringer des Prozesses.

Auch gibt es renicedie Priorität der laufenden Prozesse zu ändern.

Clausi
quelle
2
Es sieht so aus, als ob es immer noch funktioniert,
wenn man
4
Solange kein anderer Prozess Zeit benötigt, kann Clamscan eine Menge davon abrufen. Aber sobald ein anderer Prozess (der eine höhere Priorität hat) Zeit benötigt, hat Clamscan keine Chance mehr. cpulimit begrenzt die absolute Cputime und nice die relative Cputime.
Clausi
2
+1. niceing ist der traditionelle Weg, und das aus gutem Grund.
Lövborg
Gibt es Tools, mit denen Sie einen Standardwert für die Ausführung bestimmter Anwendungen definieren können? Am besten mit einem Tool, mit dem Sie alle Voreinstellungen nebeneinander vergleichen können.
Jonny Asmar
19

Installieren Sie cpulimit

sudo apt-get install cpulimit

Es bietet verschiedene Methoden zur Begrenzung der CPU-Auslastung eines Prozesses foo: 20%

  • Mit ihrem prozessName: sudo cpulimit -e foo -l 20.

  • Durch seinen absoluten Pfadnamen: sudo cpulimit -P /usr/bin/foo -l 20

  • Durch seine PID:

    1. Finden Sie die PID des Prozesses: pidof foo. (Sagen wir, es gibt 1881 aus)
    2. sudo cpulimit -p 1881 -l 20
Sid
quelle
Kein Zielprozess gefunden ... Vielleicht liegt es daran, dass ich ein Skript zum Ausführen von Clamscan habe? Ich mache: sudo cpulimit -e /etc/cron.hourly/virusscan -l 15
Pitto
@Pitto: Du hast einen falschen Befehl eingegeben, /etc/cron.hourly/virusscanist kein Prozess. Wenn Sie einschränken müssen clamscan, führen Sie aus sudo cpulimit -e clamscan -l 15.
Sid
Oh! Richtig! Also sollte ich cpulimit beim Start in rc.local starten, oder?
Pitto
2
sudoist nicht erforderlich, der Prozess ist kein Systemprozess. Nur als Notiz
Anwar
Dies wäre eine wirklich saubere Lösung, wenn sie programmgesteuert verwendet würde! Unterstützt es musterbasierte Suchen?
Jonny Asmar
4

Dies würde ein Kommentar zu Clausis Antwort sein (die meiner Meinung nach aus Sicht der Systemadministration die "richtigste" ist), aber sie ist zu groß geworden, um in das Kommentarfeld zu passen.

  • Clamscan hat eine festgelegte Menge an Arbeit, die auf eine bestimmte Geschwindigkeit begrenzt ist, was bedeutet, dass es nur länger dauern wird. Es wird die CPU länger im Streit halten.

  • Lassen Sie es so schnell wie möglich laufen, damit Sie Ihre CPU voll auslasten können. Sehr "nett" zu machen bedeutet, dass andere Prozesse ihre Arbeit vor sich selbst erledigen können. Dies bedeutet, dass es bei vielen anderen geschäftigen Prozessen eine lange Zeit in Anspruch nehmen wird, seine eigene Arbeit zu erledigen, aber wenn nichts vorhanden ist, wird es nur die Arbeitslast aufteilen.

Oli
quelle
3

Wenn Sie clamd mit systemd ausführen, können Sie die CPUQuotaOption verwenden.

Bearbeiten /lib/systemd/system/clamav-daemon.service, um diese Zeile in den [Service]Abschnitt aufzunehmen:

CPUQuota=20%

Starten Sie dann den Dienst neu

sudo systemctl daemon-reload
sudo systemctl reload-or-restart clamav-daemon
Keith
quelle