Powershell - Skript benötigt 25 Prozess CPU-Last auf Server aber auf WS nur 13 Prozent
Hallo liebe Forengemeinde,
habe ein Skript für die Überwachung eines bestimmten Prozesses auf einen Produktiv-Server 2008R2 programmiert, dass zufriedenstellend läuft.
Wenn ich das Skript sowohl in der 32-Bit Powershell, als auch in der 64-Bit Powershell laufen lassen, zeigt der Taskmanager 25% CPU-Last an. Das ist ganz schön viel.
Habe noch ein zweites PS-Skript, dass weniger macht, also einfach nur einen anderen Prozess um 23 Uhr beendet. Das braucht auch 25 Prozent CPU-Last.
Wenn ich beide Skripts auf eineer Workstation mit Windows 7 SP1 laufen lasse, dann benötigt das Skript zw. 11-14% CPU-Last.
Der Server ist ein Virtueller Server 2008R2 Standard mit 12 GB RAM und Intel Xeon CPUs E5645. Dem Prozess sind alle 4 CPUs zugeordnet. Habe auch mal versucht andere Prozesse die CPU-Priorisierung zu ändern, hat aber nichts gebracht.
Woran kann das liegen?
Kann man das zweite Skript als Child-Prozess von der ersten Powershell laufen lassn, so dass die CPU-Last zumindest nicht zusammen 50% CPU-Last erzeugt?
Für eine kompetente Hilfe wäre ich dankbar.
Gruß
Thomas
habe ein Skript für die Überwachung eines bestimmten Prozesses auf einen Produktiv-Server 2008R2 programmiert, dass zufriedenstellend läuft.
Wenn ich das Skript sowohl in der 32-Bit Powershell, als auch in der 64-Bit Powershell laufen lassen, zeigt der Taskmanager 25% CPU-Last an. Das ist ganz schön viel.
Habe noch ein zweites PS-Skript, dass weniger macht, also einfach nur einen anderen Prozess um 23 Uhr beendet. Das braucht auch 25 Prozent CPU-Last.
Wenn ich beide Skripts auf eineer Workstation mit Windows 7 SP1 laufen lasse, dann benötigt das Skript zw. 11-14% CPU-Last.
Der Server ist ein Virtueller Server 2008R2 Standard mit 12 GB RAM und Intel Xeon CPUs E5645. Dem Prozess sind alle 4 CPUs zugeordnet. Habe auch mal versucht andere Prozesse die CPU-Priorisierung zu ändern, hat aber nichts gebracht.
Woran kann das liegen?
Kann man das zweite Skript als Child-Prozess von der ersten Powershell laufen lassn, so dass die CPU-Last zumindest nicht zusammen 50% CPU-Last erzeugt?
Für eine kompetente Hilfe wäre ich dankbar.
Gruß
Thomas
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 191833
Url: https://administrator.de/contentid/191833
Ausgedruckt am: 20.11.2024 um 13:11 Uhr
6 Kommentare
Neuester Kommentar
Hallo Thomas,
da ich keine Programmieren rein gar nichts am Hut habe, aber eben die Antworten falls Du welche bekommst kenne bzw. mir jetzt schon gut vorstellen kann, wäre es denn zu viel für Dich:
- Zu erzählen was der Server denn so alles für Jobs und Services am laufen hat.
- Was das Script denn so macht oder machen soll und zwar genau.
- Einmal unter den FAQ nachschauen wie man Code oder Quellcode hier einstellt und dann das Script einmal zu "posten" damit jemand der einen richtig Plan hat da einmal kurz darüber schauen kann!
Ich wollte Dir nicht zu nahe treten, aber ich denke halt Du erhältst dann mehr Zuspruch!
Gruß
Dobby
da ich keine Programmieren rein gar nichts am Hut habe, aber eben die Antworten falls Du welche bekommst kenne bzw. mir jetzt schon gut vorstellen kann, wäre es denn zu viel für Dich:
- Zu erzählen was der Server denn so alles für Jobs und Services am laufen hat.
- Was das Script denn so macht oder machen soll und zwar genau.
- Einmal unter den FAQ nachschauen wie man Code oder Quellcode hier einstellt und dann das Script einmal zu "posten" damit jemand der einen richtig Plan hat da einmal kurz darüber schauen kann!
Ich wollte Dir nicht zu nahe treten, aber ich denke halt Du erhältst dann mehr Zuspruch!
Gruß
Dobby
Hallo Thomas,
Dobby
der Server überwacht Sequenzierungen, die mit einer Oracle-Datenbank verbunden sind.
Hier laufen permanent Prozesse, die manchmal sehr viel tun (Daten übertragen und auch per Mail
benachrichten)
Na ja dann läuft da ja einiges ab auf dem Server und hast Du denn schon einmal versucht das Script laufen zu lassen wenn nicht so viel los ist oder besser noch wenn so gut wie gar nichts los ist, wenn es das bei einer Firma mit Autoteilen überhaupt gibt? ;)Hier laufen permanent Prozesse, die manchmal sehr viel tun (Daten übertragen und auch per Mail
benachrichten)
Die CPU-Last ohne sas Powershell Skript variert. So ca. 14-40% (in Spitzenzeiten, meist Vormittags). > In einer Halle werden Teile mit Scanner für die Sequenzierung von Autoteilen erfasst und dann am
Server registriert und übertragen. Machmal ist der Server sehr langsam und ein bestimmter Prozess,
der die Daten entgegennimmt und weiterleitet stürzt dann ab und zu ab (So ca.2-4 Wochen!).
Also wenn die Mitarbeiter im gewerblichen Bereich (Lagerbereich) mit den Symbol Scannern so richtig los legen und die auch noch, meistens über Radius, gesichert sind, und der Prozess so oder so schon was zum Abstürzen bringt und dann noch Deine Scripte darauf laufen, naja, mehr RAM oder mehr/stärkere CPU´s würde ich jetzt einmal mutmaßen und/oder ein neuer Server und die Last so wie die Arbeit wird dann eben verteilt!Server registriert und übertragen. Machmal ist der Server sehr langsam und ein bestimmter Prozess,
der die Daten entgegennimmt und weiterleitet stürzt dann ab und zu ab (So ca.2-4 Wochen!).
Ein Druckerspooler-Fenster läuft noch im Hintergrund.
Druckjobs können die Netzwerklast in einigen bestimmten Fällen auch sehr erhöhen!Primär geht es mir darum, warum das gleiche Powershell-Skript auf meiner Workstation nur 12-13% CPU-
Last hat (Core i7) und auf dem Server 25-27%.
Nun die ackert (arbeitet) ja auch nicht so wie der Server!!Last hat (Core i7) und auf dem Server 25-27%.
Wenn ich zwei Skripte laufen habe, ist der Server 50% ausgelastet.
Kann man das nicht als Dienst starten und dem dann einfach eine andere Priorität zuweisen?Überlegenswert, wäre die Anzahl der CPUs auf dem Virtuellen Server zu erhähen, so dass die
Prozessauslastung besser und verteilter ist (Meine Vermutung!)
Und wenn es nicht reicht sogar noch ein bisschen RAM soll ja mitunter richtige Wunder wirken.Prozessauslastung besser und verteilter ist (Meine Vermutung!)
Wie kann ich ein zweites Skript als Child-Prozess, dass mit der ersten Powershell-Umgebung ausführen, > ohne eine zweite Powershell-Sitzung zu starten?
Da ich absolut nichts von Programmieren verstehe, enthalte ich mich hier einmal dezent.Vielen Dank für gute Vorschläge.
Wenn sie richtig sind und helfen gerne!Hänge noch ein Screenshot vom Taskmanager hier dran.
Wenn Du x% schreibst wird das wohl nicht nötig sein, denn das Du das ablesen kannst glaubt Dir jeder.Thomas
GrußDobby
Dürfte ganz einfach sein:
Dein Skript ist Single Threaded und verbraucht alle Rechenzeit die es kriegen kann.
Da Single Threaded wird nur ein Core ausgelastet.
Server hat 4 virtuelle CPUs, eine wird ausgelastet = 25% (Ein Viertel)
Workstation hat mit i7 und Hyperthreading 8 virtuelle Cores, einer wird ausgelastet = 12,5% (Ein Achtel)
Durch den Scheduler der das wild über die Cores verteilt sieht man das im Taskmanager nicht so genau (es ist also nicht ein Core permanent ganz oben).
Kauf Dir einen grossen Server mit 20 Cores, dann werdens nur noch 5% sein.
Oder das Skript effizienter programmieren.
Dein Skript ist Single Threaded und verbraucht alle Rechenzeit die es kriegen kann.
Da Single Threaded wird nur ein Core ausgelastet.
Server hat 4 virtuelle CPUs, eine wird ausgelastet = 25% (Ein Viertel)
Workstation hat mit i7 und Hyperthreading 8 virtuelle Cores, einer wird ausgelastet = 12,5% (Ein Achtel)
Durch den Scheduler der das wild über die Cores verteilt sieht man das im Taskmanager nicht so genau (es ist also nicht ein Core permanent ganz oben).
Kauf Dir einen grossen Server mit 20 Cores, dann werdens nur noch 5% sein.
Oder das Skript effizienter programmieren.