Ist das Festlegen eines höheren Niveaus für einen Prozess ein effektiver Weg, um die Auswirkungen auf die Systemlast / CPU-Zeit zu verringern?

11

Ich habe einen Rsync-Cron-Job, der die Serverlast erhöht und Monitorwarnungen auslöst. Wenn ich den Job so einstelle, dass er mit einem hohen Level ausgeführt wird, würde dies die Auswirkungen auf die Systemlastwerte effektiv reduzieren?

Gregg Leventhal
quelle
Für rsync wäre es effektiver, seine Switches zu verwenden, um entweder die Komprimierung zu reduzieren oder die Bandbreitennutzung zu begrenzen.
Nemo

Antworten:

9

Es wird Ihre Last nicht reduzieren.

Andere Prozesse können die CPU-Zeit nur dann häufiger nutzen, wenn ein möglicher Ressourcenkonflikt besteht (mehrere Prozesse "konkurrieren" um nicht genügend verfügbare CPU-Zeit).

Totor
quelle
9

Durch Ändern des Nice-Werts wird die Systemlast nicht direkt reduziert. Es kann jedoch verwendet werden, um mehr Ressourcen für die verbleibenden Prozesse verfügbar zu machen, was meiner Meinung nach das ist, was Sie wirklich wollen.

Von http://linux.101hacks.com/monitoring-performance/hack-100-nice-command-examples/

Der Kernel entscheidet anhand des netten Werts, wie viel Prozessorzeit für einen Prozess benötigt wird. Möglicher netter Wertebereich ist: -20 bis 20. Ein Prozess, der einen netten Wert von -20 hat, hat eine sehr hohe Priorität. Der Prozess, der einen schönen Wert von 20 hat, hat eine sehr niedrige Priorität.

Ja, Sie möchten den Cron-Job auf einer höheren Ebene als die anderen Prozesse ausführen, wenn Sie sicherstellen möchten, dass andere Prozesse Priorität erhalten.

Dazu möchten Sie, dass Ihr Cron-Skript folgendermaßen ausgeführt wird:

/bin/nice -n 10 /path/to/cron-script

Dadurch wird das Cron-Skript mit einer um 10 erhöhten Genauigkeit ausgeführt. Sie möchten wahrscheinlich ein wenig testen, um ein gutes Gleichgewicht (Wortspiel nicht beabsichtigt) zwischen den verbleibenden Prozessen und der Ausführungszeit des Skripts zu finden.

Siehe auch Wie funktioniert es gut zu arbeiten? und http://www.cyberciti.biz/faq/change-the-nice-value-of-a-process/ für weitere Details.

M_dk
quelle
5

Es ist unwahrscheinlich, dass sich das Ändern der netten Ebene eines Prozesses auf den Systemlastwert auswirkt. Der Systemlastwert ist die durchschnittliche Länge der Ausführungswarteschlange , dh die Anzahl der Prozesse, die die CPU verwenden möchten.

Wenn Sie einen CPU-gebundenen Prozess ausführen (rsync nicht, aber nur zum Beispiel), möchte er immer die CPU-Zeit verwenden, wenn etwas verfügbar ist. Da es immer ausgeführt werden soll, trägt es einen Lastwert von 1,0 zum Systemlastwert bei. Es spielt keine Rolle, wie hoch die Prozessstufe ist, da die durchschnittliche Länge der Ausführungswarteschlange von der Reihenfolge der Prozesse in der Ausführungswarteschlange nicht beeinflusst wird.

Greg Hewgill
quelle
Dies ist wichtig zu beachten. Wenn Sie eine Menge von niced Prozessen ausführen, wird die Systemlast aussieht sehr hoch , auch wenn in der Tat keine wirkliche Arbeit wird immer langsamer. In einigen Fällen zeigt das Laden ein echtes Problem, dh, Linux kann nicht zulassen, dass der Niced-Prozess alle Ressourcen verwendet, die er tatsächlich problemlos verwenden kann (alle warten die meiste Zeit auf keinen Gewinn).
Nemo
2

Sie können drei Möglichkeiten in Betracht ziehen, um die Auswirkungen Ihres Prozesses auf die Systemlast / CPU-Zeit zu verringern:

  • Verwenden Sie den niceBefehl, um die Priorität der Aufgabe manuell zu senken.
  • Verwenden Sie den cpulimitBefehl, um den Vorgang wiederholt anzuhalten, damit ein bestimmtes Limit nicht überschritten wird.
  • Verwenden Sie Linux built-in control groups, einen Mechanismus, der den Scheduler anweist, die für den Prozess verfügbaren Ressourcen zu begrenzen.

Ressourcen

http://blog.scoutapp.com/articles/2014/11/04/restricting-process-cpu-usage-using-nice-cpulimit-and-cgroups

RafaSashi
quelle