Frage

Ich laufe auf einem gemeinsam genutzten * NIX-Server (betrieben von Site5). Ich habe ein PHP-Skript, das gelegentlich tun einige Offline-Berechnungen im Hintergrund ausgeführt wird. Es nutzt rund 100% CPU, während es ausgeführt wird. Ich habe versucht, schön-ing es, wie folgt aus:

nice -n 19 php script.php

, aber das scheint keinen Unterschied zu machen.

War es hilfreich?

Lösung

Sie könnten streuen usleep (int $ micro_seconds) durch den Code. Dadurch wird Ihr Skript erzwingen für winzige Mengen an Zeit zu stoppen, um die CPU für andere Dinge frei.

Wird das allerdings notwendig sein? Wenn Sie Skript eine niedrige Priorität hat, macht es aus, dass es 100% der CPU ist mit ... Wenn andere Prozesse mit höherer Priorität die CPU benötigt würden sie nicht die Zeit bekommen sie benötigt und das Skript den Rest bekommen (bis zu 100%)?

Andere Tipps

Auch niced, es zu 100% CPU verwenden werden, falls verfügbar. Allerdings wird der Kernel-Priorität für alle anderen (nicht-niced) Prozesse geben, die zusammen kommen.

Solange das System reagiert, und Sie können andere Arbeit zu erledigen, während es läuft, würde ich nicht darum kümmern. Ich betreibe einen Distributed Computing Client auf meinen Systemen, und es tränkt alle verfügbaren CPU-Zyklen auf. Da es mit der niedrigsten Priorität ausgeführt wird, es alle und alle anderen Prozesse preempt nach Bedarf.

Als Ihr Prozess Hintergrund ist, und nutzt 100% CPU scheint es, dass der Prozess der CPU gebunden ist. Es ist Hintergrund so gebunden Benutzer nicht zu erwarten wären, so dass die einzige Alternative wäre IO gebunden. Wenn Ihr Prozess soll nicht wirklich interessant IO tun, das Skript selbst zu erwarten wäre CPU gebunden zu sein, und zwar nicht nur fehlerhaft.

Prozesse werden immer versuchen, so schnell wie möglich zu gehen. Wenn sie IO gebunden sind, werden sie zu 100% IO verwenden, wenn sie die CPU gebunden sind, werden sie versuchen, 100% CPU zu verwenden. Richtig geschrieben Prozess Schedulers Ziel automatisch ein Gefühl der Fairness für alle Prozesse zur Verfügung zu stellen, was bedeutet, dass die größeren Prozesse niedrigere Priorität erhalten. Sie können weiterhin die Priorität, mit schön senken. Die Tatsache, dass die CPU-Auslastung immer noch etwa 100% ist, bedeutet, dass es keine anderen Prozesse sind die derzeit CPU gebunden sind, aber warten höchstwahrscheinlich für die Eingabe aus dem Netzwerk.

Nizza Änderungen, wie oft Ihre PHP-Ergebnisse in 100% CPU, wenn es erhebliche Prozesse Kontextschalter, nicht wie viel.

Sobald ein Programm einen Systemaufruf ausführt, kann der Kernel die CPU in einem anderen Prozess ergeben, bevor die eigentliche Arbeit zu tun. Ihre PHP scheinen keinen Systemaufruf zu machen, wenn es mit voller Geschwindigkeit läuft. Das heißt, dass Sie nicht machen jede Blockierung I / O (Buchse, Datei, etc.) Sehen Sie, wenn jeder Codeblock in busy-Warte geklebt wird.

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