Frage

Ich habe ein Quad-Core-System mit Applikationen von Drittanbietern, die hin und wieder mehrere Prozesse Spins (immer die gleichen ausführbaren aber mehr Instanzen davon) und nehme 100% der CPU-Zeit. Ich habe auch ein paar Web-Services auf dem gleichen Feld (IIS und Dritten) ausgeführt wird.

Das Problem mit dem alle Kernen beschäftigt zu sein, ist, dass es diesen dritten Partei Webserver Timeout macht (IIS arbeitet jedoch in Ordnung, nur langsamer als üblich). Ich habe keine Kontrolle über Dritten Web-Server, es ist ein Teil des größeren Produkts und hat in Betrieb ist. Also habe ich versucht, mit Prozessor-Affinität zu spielen (über Sysinternals Process Explorer) und begrenzen die lästigen Prozesse bis 3 Kerne von 4 und widmen den vierten Kern an den Dritten Web-Server, und es scheint ganz gut zu funktionieren.

Das Problem ist, dass es setzt nur Affinität auf den laufenden Prozess und nicht auf ausführbare Ebene, so dass nach diese Prozesse beenden und später Respawn als neue Prozesse alle ist es das gleiche wieder - sie alle 4 Kerne nehmen. Also, ich habe gegoogelt über dieses ImageCfg.exe Dienstprogramm von Microsoft, aber ich kann es nicht auf Microsoft Webside zum Download und ich sehe, dass manche Leute es versucht, und beschweren sich jetzt, dass sie nicht wirklich funktionieren.

Gibt es eine Möglichkeit, die Affinität zu der ausführbaren Datei zu halten?

War es hilfreich?

Lösung

Ein Merkmal von Process Lasso ist die Affinität eines Prozesses gesetzt, wenn dieser Prozess gestartet wird .

Andere Tipps

http: // waynes -world-it.blogspot.com/2009/06/processor-affinity-on-windows-server.html

Powershell

Mit Powershell der Prozessor-Affinität für einen oder mehr laufenden Prozesse zu setzen. Es gibt einen Beispielskript unten, um den Prozessor Maske von calc.exe zu den ersten 4 Prozessoren zu setzen. Ich mag diese Methode, weil das Skript einfach ist, wäre es einfach, auf x86 und x64 arbeitet zu planen, mehrere Prozesse mit dem gleichen Namen trägt und zumindest zum Teil, weil es, wie einfach Verwaltung mit Powershell-Highlights ist.

Beachten Sie, wenn Sie faktorielles einer großen Zahl mit calc.exe (n!) Verwenden Sie% CPU generate100, die zum Testen nützlich sein kann. Die Maske ist unten 0xf = 1111 - eine Maske, so dass die Verwendung von nur die ersten vier Prozessoren:

$calcSet = Get-Process -ProcessName "calc"
foreach ($calc in $calcSet) {$calc.ProcessorAffinity=0xF}

Sie können an den /AFFINITY Parametern start suchen.

Von der Hilfe:

AFFINITY    The new application will have the specified processor
            affinity mask, expressed as a hexadecimal number.

Als Prozessor-Affinität unter Windows eine Bitmaske ist, dass Sie einige Experimente benötigen, aber ich würde davon ausgehen, 1 der erste Kern ist daher 7 die ersten drei Kerne und F ist, alle vier zu sein. Oder 8 nur der vierte.

Sie können dann geplante Aufgaben oder Verknüpfungen mit einem Aufruf ersetzen mit den entsprechenden Parametern start.

Sie können mit dem Single-proc Affinität Anwendungsschnittstellenmodul einen Prozessor auf der ausführbaren Ebene zwingen, die den Prozess auf einen Kern zwingen werden.

In diesem Artikel, http://msdn.microsoft.com/en- us / library / bb173458.aspx , hat einen Absatz über die Shim nach unten hin ermöglicht wird.

Verwenden Sie SetProcessAffinityMask () . Und Vorsicht, Processor Affinity vererbt wird!

Sie müssen ImageFileExecutionOptions verwenden, insbesondere die "Debugger" Option und Ihre eigene kleine ausführbare Datei schreiben, die SetProcessAffinityMask () auf sich selbst aufruft, und laicht dann einen neuen Prozess, der die, die Sie einstellen Affinität wollen. Stellen Sie, dass als Debugger, und du bist fertig.

Das ImageCfg.exe Dienstprogramm funktioniert. Ich habe es gerade heute ein Unternehmen Problem zu lösen. Es ist von http://www.robpol86.com/pages/imagecfg.php

Imagecfg -a 0x3 xxx.exe

begrenzt die Exe zu CPU0 und CPU1, zum Beispiel.

Offensichtlich dieses Thema ist veraltet, aber im Kommentar ohnehin nur für den Fall des Hinzufügen jemand googelt zu diesem Thema (wie ich)

  

Sie könnten versuchen, die Priorität des Prozesses einstellen, so dass, wenn es auch   beschließt etwas 100% der CPU zu verwenden, die eine höhere Priorität ist, kann   übernehmen, wenn es so tun muss.

     

Auf diese automatisch (anstatt in der Aufgabe spielen   Manager) ist etwas, was ich vor einer Weile gefragt.

Der Startbefehl verwendet werden kann Start Priorität eines Prozesses zu setzen.

Eg. start "my path\my process" /LOW für niedrige Priorität.

erlaubt Priorität Schalter LOW, NORMAL, HIGH, REALTIME, ABOVENORMAL, BELOWNORMAL

kann von einer Batch-Datei zum Beispiel genannt werden.

Sie könnten versuchen, die Priorität des Prozesses einstellen, so dass selbst dann, wenn er entscheidet, 100% der CPU zu verwenden, etwas, die höhere Priorität übernehmen kann, wenn es so tun muss.

Dadurch automatisch (anstatt in den Task-Manager spielen) ist etwas, das ich vor einer Weile gefragt.

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