2013-09-06 4 views
5

Ho un long-running PowerShell script workflow che viene invocato come lavoro utilizzando il parametro -AsJob. Scrive periodicamente avvisi e messaggi di output che devono essere recuperati utilizzando il cmdlet Retrieve-Job.Quante uscite di lavoro verrà trattenuto da PowerShell se non lo ricevo?

Sono curioso di sapere dove PowerShell memorizza questo output di lavoro che non è stato ancora recuperato e se esiste un limite superiore pratico. In tal caso, eliminerebbe automaticamente l'output del lavoro in modo FIFO? Crash?

risposta

6

Non so se questo risponde realmente alla tua domanda, ma ho provato una varietà di Start-Job comandi che appena creato un range da 1 a un un gran numero - la maggior parte ha dato un'eccezione di memoria, ma finalmente ho avuto uno per lavorare a compimento:

# these all bombed out 
Start-Job -ScriptBlock { 1..4000000000 } 
Start-Job -ScriptBlock { 1..2000000000 } 
Start-Job -ScriptBlock { 1..1000000000 } 
# this one finally started evaluating 
Start-Job -ScriptBlock { 1..100000000 } 

lascio funzionare per un po 'e si mangiò un nucleo pieno CPU mentre stava valutando la gamma. Ha terminato l'utilizzo di circa 5 GB di RAM in base al Task Manager e avrebbe utilizzato di più, ma a quel punto ha iniziato a esaurire la memoria fisica. L'utilizzo della CPU è diminuito poiché il sistema operativo doveva avviare la memoria di paging come un matto.

Come si può vedere nello screenshot qui sotto, in realtà ha generato un altro processo di powershell.exe - quindi immagino che in parte risponda alla tua domanda su dove memorizza i dati mentre il lavoro è in esecuzione. Sembra che ci sia un limite pratico che dipende dalle risorse disponibili. PowerShell non eliminerà o altrimenti perderà informazioni nel buffer del lavoro (a meno che il secondo processo non si blocchi in modo anomalo?) Ma potrebbe risultare problematico recuperare anche molti dati. Potresti voler fare alcune prove e vedere quali sono i limiti accettabili e pratici che possono essere supportati dal tuo ambiente.

Nota: l'utilizzo di un intervallo molto più piccolo, ad esempio 1..100000, fornisce più di ampi record per osservare il comportamento mentre non del tutto sopraffacendo il sistema. Ho usato i numeri più grandi per vedere quali sono i limiti pratici.

Task Manager showing powershell.exe using a lot of memory

+1

Grazie per la risposta. Immagino che quello che ancora non è chiaro al 100% sia ciò che PowerShell fa con i flussi di lavoro sospesi (che sono un po 'diversi dai normali lavori che penso). Dal momento che possono sopravvivere ai riavvii e riprenderli, deve persistere anche nell'output del lavoro in coda. Ma sembra che non ci sia un limite superiore reale oltre ai limiti di memoria/processo. Grazie per il tuo contributo. – Josh

Problemi correlati