thl1966
Goto Top

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

f5f6405726d3c4788dc4d93e88c41465

Content-Key: 191833

Url: https://administrator.de/contentid/191833

Printed on: April 25, 2024 at 00:04 o'clock

Mitglied: 108012
108012 Sep 26, 2012 at 08:31:00 (UTC)
Goto Top
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
Member: thl1966
thl1966 Sep 26, 2012 at 08:49:49 (UTC)
Goto Top
Hallo 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)

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!).

Ein Druckerspooler-Fenster läuft noch im Hintergrund.

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%.

Wenn ich zwei Skripte laufen habe, ist der Server 50% ausgelastet.

Überlegenswert, wäre die Anzahl der CPUs auf dem Virtuellen Server zu erhähen, so dass die 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?

Vielen Dank für gute Vorschläge.

Hänge noch ein Screenshot vom Taskmanager hier dran.

Thomas
Mitglied: 108012
108012 Sep 26, 2012 at 09:08:50 (UTC)
Goto Top
Zitat von @thl1966:
Hallo Dobby,
Hallo Thomas,

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? ;)

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!

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!!

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.

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
Member: AndreasHoster
AndreasHoster Sep 26, 2012 updated at 10:28:14 (UTC)
Goto Top
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.
Member: thl1966
thl1966 Sep 26, 2012 at 12:54:48 (UTC)
Goto Top
Hallo an alle,

vielen Dank für die Tipps.

Habe das Problem gelöst.

Habe aus den zwei PS-Skript eins gebastelt und den Code optimiert. Hier laufen eine
Endlos-Schleife und die Abfrage wg. Wochentag und für bestimmte Zeiten, wo der Prozess nicht überwacht wird.

Hier hatte ich jeweils die aktuelle Uhrzeit und Datum abgefragt.
Habe dies am Anfang der While-Schile gelegt und aus den Unterabfragen entfernt.

Jetzt braucht das komplette Skript zw. 1 bis 15 Prozent und für ein Bruchteil einer Sekunde manchmal ca. 20%
Damit kann ich leben.

PS: Hier läuft ein ESX-Server, der schon sehr gut ausgestattet ist.
Der Virtuelle Server hat halt eine Zuordnung von 12 GB RAM und 4 Cores.

Der Pysikalische Speicher ist mit max. 50-53 Prozent ausgelastet. Also RAM-Aufrüstung nicht erforderlich.

Gruß

Thomas
Member: thl1966
thl1966 Sep 26, 2012 at 12:59:15 (UTC)
Goto Top
Hier noch das Ergebnis nach der Optimierung.


Wollte das nicht vorenthalten.

a8e9c6aeb3ca555636ae9267bd9d7422