rippchen
Goto Top

Wie kann man die Arbeitsspeichernutzung bei der Verwendung von PowerShell auf einen bestimmten Wert fixieren (limitieren)?

Gibt es eine Möglichkeit die Verwendung des Arbeitsspeichers zu limitieren ?

Ich benötige nämlich teilweise 38 GB Arbeitsspeicher (inkl. virtuellem Speicher) und mein Prozessor ist dabei nur zu 37 Prozent ausgelastet.

Das Problem tritt bei folgendem Skript auf, welches zur Bearbeitung von CSV Dateien dient:

$folder = 'C:\Users\ICH\Desktop\Import'  
$out = 'C:\Users\ICH\Desktop\Export\Gesamt.csv'  
gci $folder -Filter *.csv -recurse | %{
    $raw = ((gc $_.FullName) | select -Skip 1) 
    $csv = $raw[0..($raw.GetUpperBound(0)-0)]| ConvertFrom-CSV -Delimiter ";" -Header "1","2","Timestamp","4","Modification Timestamp","6","7"   
    $csv | group {get-date $_.Timestamp} | %{
    $_.Group | sort {get-date $_.'Modifikation Timestamp'} -Descending | select -First 1  
} | Sort "Timestamp", "Modification Timestamp" -descending | export-csv $out -Append -Delimiter ";" -Notype -Encoding UTF8     
}

Die Technischen Daten meines Rechners sind:

Prozessor: Intel i7 2600k 4 Kerne, 8 Threads, 4 GHz
Arbeitsspeicher: 16 GB (4 Module, laufen im Dual Channel Modus)
OS: Windows 10 64 Bit Enterprise
PowerShell Version: 5.0.10240.16384

Wünschenswert wäre, wenn die Arbeitsspeicher Nutzung von Powershell auf 12 GB Limitiert wird, da mein Rechner im idle ca. 4 GB benutzt.

VG

Rippchen

Content-Key: 305709

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

Printed on: April 24, 2024 at 23:04 o'clock

Member: Pjordorf
Pjordorf May 30, 2016 updated at 09:28:46 (UTC)
Goto Top
Hallo,

Zitat von @Rippchen:
Das Problem tritt bei folgendem Skript auf, welches zur Bearbeitung von CSV Dateien dient:
Welches Monster an CSV Datei hast du denn? 50TByte?

Ich benötige nämlich teilweise 38 GB Arbeitsspeicher
Wie hast du dies festgemacht bei deinen 16 GB RAM?

Gruß,
Peter
Member: Rippchen
Rippchen May 30, 2016 at 09:35:43 (UTC)
Goto Top
Eine CSV Datei kann bei mir bis zu 1 GB haben. Es sind nämlich viele doppelte und dreifache Messwerte für ein ganzes Jahr, im 15 Min tackt
enthalten.

Ich habe meinen virtuellen Speicher auf 25 GB Hochgesetzt und dementsprechend wird meine SSD sehr stark belastet, welches unschön ist.

VG
Rippchen
Mitglied: 129413
Solution 129413 May 30, 2016 updated at 09:44:01 (UTC)
Goto Top
$raw.GetUpperBound(0)-0
Was soll dieses Konstrukt denn bwirken?? Völlig überflüssig wenn der Upperbound sowieso gleich bleibt...
Benutze weniger Variablen in der Schleife und lade nicht die gesamte CSV auf einmal in den Speicher sondern pipe:

$folder = 'C:\Users\ICH\Desktop\Import'  
$out = 'C:\Users\ICH\Desktop\Export\Gesamt.csv'  
gci $folder -Filter *.csv -recurse | %{
    gc $_.FullName | select -Skip 1| ConvertFrom-CSV -Delimiter ";" -Header "1","2","Timestamp","4","Modification Timestamp","6","7" | group {get-date $_.Timestamp} | %{$_.Group | sort {get-date $_.'Modifikation Timestamp'} -Descending | select -First 1} | Sort "Timestamp", "Modification Timestamp" -descending | export-csv $out -Append -Delimiter ";" -Notype -Encoding UTF8  
[System.GC]::Collect()
}
Gruß skybird
Member: Rippchen
Rippchen Jun 12, 2016 at 11:03:22 (UTC)
Goto Top
Vielen Dank. Es funktioniert sehr gut und die Arbeitsspeicherbelastung ist auch sehr gering.

Das mit UpperBound stammt noch aus einem alten Skript und muss manchmal aktiviert werden. Hier aber fast nie, daher kann es ruhig raus.

Mir fällt auf, dass meine CPU nur mit bis zu 14 % ausgelastet wird und der Arbeitsspeicher nun sehr wenig genutzt wird.

Gibt es eine Möglichkeit die CPU mehr auszunutzen, da die Bearbeitung schon sehr lange dauert.

Ich habe nun im Übrigen 32 GB Arbeitsspeicher, die genutzt werden könnten.

Vielen Dank im Voraus.

Rippchen
Mitglied: 129413
129413 Jun 12, 2016 updated at 11:11:00 (UTC)
Goto Top
Nutze parallele Threadverarbeitung, z.B. mit Jobs (Start-Job)
Ein Single-Thread wird deinen Prozessor so nie auslasten, das versteht sich ja von selbst denn Powershell startet ja meist im STA (Single Thread Appartment) Mode.
Powershell-Workflows sind dafür z.B, perfekt geeignet mehrere Aufgaben parallel zu verabeiten:
https://blogs.technet.microsoft.com/heyscriptingguy/2012/12/26/powershel ...