Ich habe eine geplante Aufgabe, die sehr CPU- und IO-intensiv ist und deren Ausführung etwa vier Stunden dauert (Erstellen von Quellcode, wenn Sie neugierig sind). Die Aufgabe ist ein Powershell-Skript, das verschiedene Unterprozesse für die Ausführung seiner Arbeit erzeugt. Wenn ich denselben Prozess interaktiv von einer Powershell-Eingabeaufforderung aus als dasselbe Benutzerkonto ausführe, dauert es ungefähr zweieinhalb Stunden. Die Aufgabe wird unter Windows Server 2008 R2 ausgeführt.
Ich möchte wissen, warum die Ausführung als geplante Aufgabe so viel länger dauert - mehr als eine Stunde länger. Eine Sache, die mir aufgefallen ist, ist, dass der Taskplaner mit einer Priorität unter Normal ausgeführt wird. Wenn meine Task gestartet wird, erbt sie dieselbe niedrigere Priorität. Ich habe das Skript jedoch aktualisiert, um die Priorität des Powershell-Prozesses auf Normal zurückzusetzen, und es dauert immer noch genauso lange.
Hat jemand eine Idee, was zwischen den beiden Szenarien unterschiedlich sein könnte? Ich habe Unterschiede in der Prozessor- und E / A-Auslastung ausgeschlossen - nur für diese Aufgabe wird das System verwendet, sodass nichts anderes ausgeführt wird, das um Ressourcen konkurrieren könnte.
Antworten:
Hier scheint es mehr als nur "normale" Prozesspriorität zu geben. Wie ich in der Frage festgestellt habe, führt der Aufgabenplaner Ihre Aufgabe standardmäßig mit einer niedrigeren Priorität als der normalen aus. In dieser Frage zu StackOverflow wird beschrieben, wie Sie einen Task so korrigieren , dass er mit der Priorität "Normal" ausgeführt wird. Bei der Korrektur bleibt jedoch eines etwas anders: die Speicherpriorität. Die Speicherpriorität war eine neue Funktion für Windows Vista und wird in diesem Technet-Artikel beschrieben . Sie können die Speicherpriorität mit Process Explorer anzeigen , ein unverzichtbares Tool für jeden Administrator oder Programmierer.
Trotzdem ist die Speicherpriorität Ihrer Aufgabe auf 4 festgelegt, was eine Stufe unter der normalen Einstellung von 5 liegt. Als ich die Speicherpriorität meiner Aufgabe manuell auf 5 erhöhte, war die Leistung eingeschaltet Par mit dem interaktiven Ausführen des Prozesses.
Informationen zum Erhöhen der Priorität finden Sie in meiner Antwort auf eine verwandte StackOverflow-Frage zur E / A-Priorität. Das Festlegen der Speicherpriorität erfolgt in ähnlicher Weise über NtSetInformationProcess mit
PROCESS_INFORMATION_CLASS
set toProcessMemoryPriority
(der Wert hierfür ist 39 oder 0x27). Ich könnte ein kostenloses Dienstprogramm erstellen, mit dem dies eingestellt werden kann, wenn andere es benötigen und keinen Zugriff auf Programmierwerkzeuge haben.BEARBEITEN: Ich habe ein kostenloses Dienstprogramm zum Abfragen und Festlegen der Speicherpriorität einer Aufgabe geschrieben, das hier verfügbar ist . Der Download enthält sowohl Quellcode als auch eine kompilierte Binärdatei.
quelle
Das Problem ist, dass Ihr Prozess mit einer niedrigen E / A-Priorität und einer niedrigen Speicherpriorität beginnt. Dies lässt sich am einfachsten mit dem Prozess-Explorer von sysinternals überprüfen. Wenn Sie sich die Eigenschaften eines der Prozesse ansehen, die aus dieser geplanten Aufgabe hervorgegangen sind, werden Sie feststellen, dass die E / A-Priorität niedrig und die Speicherpriorität 2 ist.
Hier ist die Lösung für dieses Problem:
<Priority>7</Priority>
Leider gibt es keine Möglichkeit, die anfängliche Priorität geplanter Aufgaben über die GUI zu ändern.
quelle
The format of the task is not valid. The following error was reported: (1,2)::
. Wenn Sie die Datei in ANSI speichern, lösen Sie sie für mich auf.Wenn Sie festlegen, dass es als geplante Aufgabe als Benutzer X ausgeführt wird, und sich dann als Benutzer X anmelden, bevor es ausgeführt werden soll, sollte es ein Fenster in Ihrer Sitzung öffnen, wenn es ausgeführt wird. Es wird in Ihrer Sitzung ausgeführt.
Wenn Sie dies tun, dauert es länger oder kürzer? Ich weiß nicht, was dies bedeuten wird, aber es kann ein nützliches Unterscheidungsmerkmal sein. Konnte es einen Netzwerkzugriff geben, über den das Benutzerkonto verfügt, wenn es angemeldet ist, aber nicht, wenn es als geplante Aufgabe ausgeführt wird, der eine Zeitüberschreitung verursachen und fehlschlagen muss? Ist das Verhalten anders, wenn Sie ein neues Benutzerkonto erstellen und es als geplante Aufgabe unter diesem Konto ausführen lassen?
Eine andere Idee: Wenn Sie es als geplante Aufgabe ausführen - werden die Unterprozesse jetzt, da Sie die Priorität für Ihr Skript festgelegt haben, alle als normal oder unter normal ausgeführt?
quelle
Möglicherweise werden geplante Aufgaben standardmäßig mit einer niedrigeren Priorität ausgeführt.
Verwenden Sie
prio
, um eine höhere Priorität zu erzwingen.quelle
Zuerst - Sie können mehr als die normale Priorität verwenden (z. B. Hoch).
Zweitens: Sie müssen verstehen, dass eine Vordergrundsitzung einige Ressourcen beansprucht, hauptsächlich Festplatten-E / A und Arbeitsspeicher, sodass geplante Aufgaben weniger werden. Für einen klaren Benchmark müssen Sie sich abmelden, während das Powershell-Skript ausgeführt wird
Sie können auch versuchen, mehr Arbeitsspeicher hinzuzufügen, RAM-Laufwerk zu verwenden oder die Arbeit auf mehrere Festplatten aufzuteilen, um Prozesse zu beschleunigen
quelle
Diese Frage ist von vor einiger Zeit und für Windows Server 2008R2. Ich hatte die gleiche Frage, aber für Windows 10. Unter Windows 10 (überprüft auf 1703 und 1809) reicht es aus, die "Priorität" über importiertes XML auf 4 zu setzen, um Ihnen die gleiche Basispriorität, dynamische Priorität und E / A-Priorität zu geben und Speicherpriorität als interaktiv gestarteter Prozess.
quelle
Hier ist ein Powershell-Snippet zum Festlegen der Priorität (funktioniert in einer Remote-Powershell-Sitzung!):
quelle