Frage

Ich frage mich, wie ein Prozess laufen in der Befehlszeile zu erhalten, verwenden weniger Rechenleistung. Das Problem, das ich habe, ist das der Prozess ist im Grunde über die CPU zu nehmen und nimmt MySQL und den Rest des Servers mit ihm. Alles ist immer sehr langsam.

Ich habe nice verwendet vor, aber haben nicht viel Glück mit ihm. Wenn es die Antwort ist, wie würden Sie es verwenden?

Ich habe auch von Putten in sleep Befehlen gedacht, aber es wird immer noch Speicher verwendet werden, so dass es nicht die beste Option ist.

Gibt es eine andere Lösung?

Es ist nicht mir egal, wie lange es läuft, im Rahmen des Zumutbaren.

Wenn es einen Unterschied macht, das Script ist ein PHP-Skript, aber ich bin es in der Befehlszeile ausgeführt wird, wie es dauert schon mehr als 30 Minuten zu laufen.

Edit: Der Prozess ist ein Migrationsscript, so dass ich die Optimierung es wirklich nicht will, zu viel Zeit verbringen, wie es nur zu Testzwecken ausgeführt werden muss und einmal live zu gehen. Nur für die Prüfung, hält es den Server so ziemlich Erliegen bringen ... und es ist ein Shared Server.

War es hilfreich?

Lösung

Sie sollten schön verwenden mit 19 „Nettigkeit“ Das macht das Verfahren sehr unwahrscheinlich laufen, wenn es andere Prozesse für die CPU warten sind.

 nice -n 19 <command>

Seien Sie sicher, dass das Programm nicht busy waits hat und überprüfen Sie auch die E / A-Wartezeit.

Andere Tipps

Das Beste, was Sie ohne Änderung des Programms wirklich tun kann, ist das schöne Wert auf den maximalen Wert zu ändern nice oder renice verwenden. Ihre beste Wette ist wahrscheinlich das Programm zum Profil, um herauszufinden, wo es den größten Teil seiner Zeit verbringt / die meisten seiner Speicher verwenden und versuchen, einen effizienteren Algorithmus zu finden, was Sie versuchen zu tun. Zum Beispiel, wenn Ihr auf einem großen Ergebnismenge von MySQL arbeiten möchten Sie können Datensätze einer nach dem anderen verarbeiten, anstatt das gesamte Ergebnis des Ladens in den Speicher gesetzt oder vielleicht können Sie Ihre Fragen oder die Verarbeitung optimieren auf die Ergebnisse durchgeführt werden.

Welcher Prozess tatsächlich ist die CPU-Aufnahme? PHP oder MySQL? Wenn es MySQL ist, wird überhaupt nicht ‚nett‘ helfen (da der Server nicht ‚nice'd up ist).

Wenn es MySQL im Allgemeinen Sie haben zu Ihren Anfragen und MySQL-Tuning suchen, warum diese Abfragen der Server Zuschlagen.

Zuschlagen MySQL-Server-Prozess als „das ganze System ist langsam“, wenn Ihre primäre Ansicht des Systems durch MySQL zeigen kann.

Sie sollten auch prüfen, ob die cmd Linie Prozess IO intensiv ist. Das kann auf einigen Linux-Distributionen angepasst wird mit dem Befehl ‚ionice‘, obwohl es Nutzung ist nicht annähernd so simpel wie die cpu ‚nett‘ Befehl.

Grund Nutzung:

ionice -n7 cmd

läuft 'cmd' mit 'best effort' Scheduler mit der niedrigsten Priorität. Siehe Manpage für mehr Nutzungsdetails.

Mit CPU-Zyklen allein sollte den Rest des Systems nicht übernehmen. Sie können dies zeigen, indem Sie:

while true; do done

Dies ist eine Endlosschleife und wird so viel von den CPU-Zyklen verwenden kann es (aufhört es mit ^ C). Sie können top verwenden, um sicherzustellen, dass er seine Arbeit tut. Ich bin mir ziemlich sicher, dass dies nicht wesentlich auf die Gesamtleistung des Systems auf den Punkt beeinflussen, wo MySQL stirbt.

Allerdings, wenn Ihr PHP-Skript ist viel Zuweisen von Speicher, die sicherlich können einen Unterschied machen. Linux hat eine Tendenz, um zu töten Prozesse zu gehen, wenn das System startet nicht genügend Arbeitsspeicher ausgeführt werden.

Ich würde das Problem eingrenzen und sicher sein, von der Ursache, bevor nach einer Lösung suchen.

Sie könnten Ihren Server interessant Verzeichnis / Dateisystem mount / was auch immer auf einem anderen Rechner über NFS und das Skript ausführen dort (ich weiß, bedeutet dies, das Problem zu vermeiden und ist nicht wirklich praktisch: |).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top