Frage

Ist es bei der Ausführung von Proc_nice () wirklich schöner Apache -Thread?

Wenn ja und wenn der aktuelle Benutzer (Nicht-Super-Benutzer) seine ursprüngliche Priorität nicht rensen, um den apache-Thread (apache_child_terate) auf einem Apache 2.0x-Server zu töten?

Das Problem ist, dass ich versuche, die Auswirkungen einer App zu begrenzen, mit der der Benutzer Ad-Hack-Abfragen ausführen kann. Die Abfragen können massiv sein und die resultierende Transformation der Daten erfordert viel Speicher und CPU.

Ich habe den Prozess bereits neu geschrieben, um streambasiert zu werden - hilft beim Speicherverbrauch, aber ich möchte auch, dass der Prozess eine niedrigere Priorität hat. Ich kann den Apache-Thread jedoch nicht in geringer Priorität belassen, da wir viele Webdienste mit hoher Priorität in derselben Box ausführen.

Tia

War es hilfreich?

Lösung

In dieser Situation, eine Lösung, wenn sie oft diese Art von schwerer Arbeit innerhalb der Apache -Prozesse nicht erledigen, sondern beides:

  • Führen Sie einen externen PHP -Prozess aus, indem Sie so etwas wie verwenden shell_exec, Zum Beispiel - dies ist, wenn Sie im synchronen Modus arbeiten müssen (dh, wenn Sie die Aufgabe nicht ein paar Minuten später ausführen können)
  • Drücken Sie die Aufgabe in ein FIFO -System und geben Sie sofort eine Nachricht an den Benutzer zurück: "Ihre Aufgabe wird bald verarbeitet."
    • und einen anderen Prozess haben (Zum Beispiel über einen Crontab jeder Minute gestartet) Überprüfen Sie diese FIFO -Warteschlange
    • und machen Sie die Verarbeitung, da ist etwas in der Warteschlange
    • Dieser Prozess selbst kann im Modus niedriger Priorität ausgeführt werden.


So oft wie möglich, insbesondere wenn die starken Berechnungen einige Zeit in Anspruch nehmen, würde ich mich für die zweite Lösung entscheiden:

  • Dadurch können Benutzer sofort ein Feedback erhalten: "Der Server hat Ihre Anfrage erhalten und wird es bald verarbeiten."
  • Es hält die Prozesse von Apaches nicht lange "funktionieren": Das schwere Zeug wird durch andere Prozesse durchgeführt
  • Wenn Sie eines Tages eine solche Menge an Verarbeitungsleistung benötigen, die ein Server nicht mehr ausreicht, ist diese Art von System einfacher zu skalieren: Fügen Sie einfach einen zweiten Server hinzu, der aus derselben FIFO -Warteschlange auswählt
  • Wenn Ihr Server wirklich zu geladen ist, können Sie zumindest für einige Zeit die Verarbeitung aus der Warteschlange einstellen, damit die Last besser werden kann-beispielsweise kann dies nützlich sein, wenn Ihre kritischen Webdienstleistungen in einem bestimmten Bereich häufig verwendet werden Zeitfenster.


Andere (Schön aussehend, aber ich habe es noch nicht ausprobiert) Lösung wäre, beispielsweise eine Art Tool wie zum Beispiel zu verwenden, Gearmter :

Gearman bietet ein generisches Anwendungsrahmen, um die Arbeit an andere Maschinen oder Prozesse zu bewirtschaften, die besser für die Arbeit geeignet sind.
Sie können parallel arbeiten, die Balance -Verarbeitung laden und Funktionen zwischen Sprachen aufrufen.
Es kann in einer Vielzahl von Anwendungen verwendet werden, von Websites mit hoher Verfügbarkeit bis hin zum Transport von Datenbankreplikationsereignissen.
Mit anderen Worten, es ist das Nervensystem für die Verteilung der Verteilungen.

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