2013-09-06 13 views
5

Mam od dawna uruchomiony PowerShell script workflow, który jest wywoływany jako zadanie przy użyciu parametru -AsJob. Okresowo zapisuje ostrzeżenia i komunikaty wyjściowe, które należy pobrać za pomocą cmdletu Retrieve-Job.Ile zadań zostanie zapisanych w PowerShell, jeśli ich nie otrzymam?

Jestem ciekawy, gdzie PowerShell przechowuje dane wyjściowe zadania, które nie zostały jeszcze odzyskane i czy istnieje praktyczny górny limit. Jeśli tak, czy automatycznie wyrzuciłby zlecenie pracy w sposób FIFO? Wypadek?

Odpowiedz

6

Nie wiem, czy to naprawdę odpowiada na to pytanie, ale próbowałem różnych Start-Job poleceń, które właśnie stworzonych zakres od 1 do dużą liczbę - najbardziej dał Spośród wyjątkiem pamięci, ale w końcu jeden do pracy do ukończenia:

# 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 } 

Pozwoliłem, aby działał przez chwilę i zjadł jeden pełny rdzeń procesora podczas oceny zasięgu. Kończyło to używanie około 5 GB pamięci RAM zgodnie z Menedżerem zadań i wykorzystywałoby więcej, ale w tym momencie zaczynało brakować pamięci fizycznej. Zużycie procesora spadło, ponieważ system operacyjny musiał uruchamiać pamięć stronicowania jak szalony.

Jak widać na poniższym zrzucie ekranu, w rzeczywistości powstał kolejny proces powershell.exe - więc domyślam się, że częściowo odpowiada na pytanie, gdzie przechowuje dane podczas pracy. Wydaje się, że istnieje praktyczny limit, który zależy od dostępnych zasobów. PowerShell nie będzie czyścił ani w inny sposób tracił informacji w buforze zadań (chyba że drugi proces ulegnie awarii?), Ale może być problematyczne pobieranie zbyt dużej ilości danych. Możesz wykonać kilka próbnych testów i sprawdzić, jakie dopuszczalne i praktyczne ograniczenia mogą być obsługiwane przez twoje środowisko.

Uwaga: używanie znacznie mniejszego zakresu, np. 1.0000000, zapewnia więcej niż wystarczającą ilość zapisów do obserwacji zachowania, ale nie całkowicie przytłacza system. Użyłem większych liczb, aby zobaczyć, jakie są praktyczne ograniczenia.

Task Manager showing powershell.exe using a lot of memory

+1

Dziękuję za odpowiedź. Domyślam się, że nadal nie jestem w 100% jednoznaczny, co robi PowerShell z zawieszonymi przepływami pracy (które są nieco inne niż zwykłe zadania, które myślę). Ponieważ mogą one przetrwać ponowne uruchomienie komputera i zostać wznowione, muszą również utrzymywać kolejkę zadań wyjściowych. Ale wygląda na to, że nie ma prawdziwego górnego ograniczenia poza ograniczeniami pamięci/procesu. Dziękuję za twój wkład. – Josh