2013-09-06 24 views
5

Tôi có một thời gian dài PowerShell script workflow được gọi là công việc sử dụng thông số -AsJob. Nó định kỳ viết các cảnh báo và thông báo đầu ra cần được truy xuất bằng lệnh ghép ngắn Retrieve-Job.PowerShell sẽ giữ bao nhiêu đầu ra công việc nếu tôi không nhận được?

Tôi rất tò mò khi PowerShell lưu trữ kết quả công việc này chưa được truy xuất và nếu có giới hạn trên thực tế. Nếu vậy, nó sẽ tự động thanh lọc đầu ra công việc một cách FIFO? Tai nạn?

Trả lời

6

Tôi không biết nếu điều này thực sự trả lời câu hỏi của bạn, nhưng tôi đã cố gắng rất nhiều Start-Job lệnh vừa tạo một phạm vi từ 1 đến một một số lượng lớn - nhất đưa ra một ra khỏi bộ nhớ ngoại lệ nhưng cuối cùng tôi đã một để hoàn thành công việc:

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

Tôi để nó chạy một chút và nó ăn hết một lõi CPU trong khi đang đánh giá phạm vi. Nó đã kết thúc bằng cách sử dụng khoảng 5GB RAM theo Task Manager và sẽ sử dụng nhiều hơn nhưng bắt đầu chạy ra khỏi bộ nhớ vật lý tại thời điểm đó. Việc sử dụng CPU giảm xuống khi hệ điều hành đã bắt đầu phân trang bộ nhớ như điên.

Như bạn có thể thấy trong ảnh chụp màn hình bên dưới, nó thực sự sinh ra một quá trình powershell.exe khác - vì vậy tôi đoán rằng một phần sẽ trả lời câu hỏi của bạn về nơi lưu trữ dữ liệu trong khi công việc đang chạy. Nó xuất hiện có một giới hạn thực tế phụ thuộc vào nguồn lực sẵn có. PowerShell sẽ không dọn dẹp hoặc mất thông tin trong bộ đệm công việc (trừ khi quá trình thứ hai bị treo?) Nhưng nó có thể trở thành vấn đề để truy xuất nhiều dữ liệu đó. Bạn có thể muốn thực hiện một vài lần chạy thử và xem những giới hạn được chấp nhận và thực tế nào có thể được môi trường của bạn hỗ trợ.

Lưu ý: Sử dụng phạm vi nhỏ hơn nhiều, như 1..100000, cung cấp nhiều hồ sơ phong phú hơn để quan sát hành vi trong khi không hoàn toàn áp đảo hệ thống. Tôi đã sử dụng những con số lớn hơn để xem giới hạn thực tế là gì.

Task Manager showing powershell.exe using a lot of memory

+1

Cảm ơn bạn đã trả lời. Tôi đoán những gì tôi vẫn chưa rõ 100% là PowerShell làm gì với các luồng công việc bị đình chỉ (có một chút khác biệt so với các công việc thường xuyên mà tôi nghĩ). Vì chúng có thể tồn tại khi khởi động lại và được tiếp tục, nó phải duy trì kết quả công việc xếp hàng đợi. Nhưng có vẻ như không có giới hạn trên thực sự nào ngoài giới hạn bộ nhớ/quá trình. Cảm ơn về thông tin bạn vừa nhập. – Josh