此應用程序允許您在Windows進程上設置約束。它用於此目的。
目錄
您可以從發行頁面下載最新版本的二進製文件,或將其與巧克力或winget安裝:
choco install procgov
# or
winget install procgov在這裡不多說:)這是您從命令提示啟動procgov以啟動新過程或附加到運行的模式。
使用Procgov時,您可以觀察到它有時會啟動第二個實例(除非您使用-Nomonitor Switch)。第二個實例是一個作業監視器,您可以通過命令行args中的 - monitor開關識別它。它將一直活著,直到受監視的工作退出的最後一個過程為止。每個Windows會話最多應有一個作業監視器的實例。它的作用是監控Procgov創造的工作。監視器應在監視工作中的最後一個過程終止後立即退出。
此功能處於Beta階段。請謹慎使用並報告任何經歷的錯誤。
如果您使用- 安裝開關來持久應用程序設置,則Procgov將在註冊表中保存設置,並將創建一個名為ProcessGoverNor的Windows服務。默認情況下,它將使用系統帳戶和%ProgramFiles%ProcessGovernor文件夾作為服務基礎路徑。您可以使用- service-path , -service-username和- service-password命令行開關來配置此設置。如果您運行另一個應用程序的安裝命令,Procgov將在註冊表中添加新數據,但會重複使用現有服務。短時間後,該服務應在更新的配置中獲取更新的配置。
ProcessGovernor服務監視啟動過程並應用安裝過程中預定義的限制。
要卸載服務,請使用-uninstall Switch。刪除最後保存的配置時,將刪除該服務。如果要刪除所有保存的Procgov數據,以及服務,請使用-uninstall-All Switch。
您可以在新創建的過程或已經運行的過程上設置限制。為了限制運行過程,請使用-p | -pid開關,例如。
procgov.exe --maxmem 40M --pid 1234要啟動以應用限制的新過程,只需將過程映像路徑作為procgov參數,例如。 procgov64 --maxmem 40M c:temptest.exe 。如果您需要將任何參數傳遞到目標過程,則最好使用--將Procgov參數與目標過程分開,例如:
procgov.exe -m 100M -- test.exe -arg1 -arg2=val2 arg3您可以將多個進程分配給同一作業對象。當您多次使用與不同進程ID的-P參數時,Procgov將對所有進程應用相同的限制:例如:
procgov.exe --maxmem 100M -p 1234 -p 1235 -p 1236如果已經將任何過程分配給Procgov作業對象,則將分配給其他過程。
一旦設置限制,也可以更新。但是,有一個要求:這些過程不能分配給其他Procgov作業(因此它們必須在同一工作或未分配的工作中)。為了更新限制,只需運行提供新限制和目標過程ID的Procgov即可。 Procgov將僅更新指定的限制。讓我們看一個示例以更好地理解這種行為:
We set a CPU limit on a process 1234
procgov.exe --nowait -c 2 -p 1234
Then we run procgov again with the new CPU limit - procgov will update the existing job object
procgov.exe --nowait -c 4 -p 1234使用-maxmem ( -m )開關過程,調速器允許您對過程所做的內存設置限制。在Windows委託中,內存實際上是該過程使用的所有私人內存。這樣,您可以使用流程調速器來測試您的.NET應用程序(包括Web應用程序)以進行內存洩漏。如果該過程正在洩漏內存,則更快地獲取OutofMemoryException 。
procgov.exe -m 100M -c 2 notepad.exe
procgov.exe -m 120M -p 1234使用-maxws和-minws開關,您可能會控制該過程的最大和最小工作集尺寸(物理內存使用)。此選項需要seincreasebasepriorityprivilege ,因此請確保您的帳戶擁有(第69期中的更多信息)。如果要限制工作集的大小,請記住要為這兩個參數提供大於零的值,例如:
procgov.exe --minws 1M --maxws 120M -p 1234-maxjobmem選項允許您為屬於給定的作業對象的所有進程指定最大訂單內存。當您啟用工作傳播到子進程或使用相同的作業對象控制多個過程時,這可能很方便,例如:
procgov.exe -r --maxjobmem 200M -- cmd.exe
procgov.exe -r --maxjobmem 1G -p 1234,1235,1236使用-CPU開關,您可以控制您的應用程序將運行哪些內核。如果您提供CPU核心號碼作為小數值,則將允許您的應用程序使用指定數量的內核。
如果將CPU核心數作為十六進制值(帶有0x前綴) ,則該數字將被視為第一個處理器組中的親和力掩碼 - 其中每個位代表CPU核心(從最小顯著的位開始)。此外,您可以使用帶有字母“ g”和/或NUMA節點編號的處理器組編號預處理“親和力”掩碼。您也可以跳過親和力並使用NUMA節點或處理器組親和力。有效的示例值: n1:g0:0xF , n1:g0 , n1 , g0 。
-CPU參數可以多次定義,最終親和力掩碼將是提供的掩碼的組合。
讓我們看看CPU密集型應用程序上的兩個示例用法。在第一個中,我們將CPU核心限制設置為兩個內核:
procgov.exe --cpu=2 TestLimit.exe我的計算機上的CPU使用圖如下如下:
一秒鐘,我們設置了CPU親和力面具(帶有十六進制符號):
procgov.exe --cpu=0x2 TestLimit.exe在這種情況下,CPU圖如下如下(注意僅使用第二個核心):
更複雜的親和力設置的示例:
# Use processor group 0 affinity from NUMA node 0 and 1 core from the group 1 in NUMA node 1
procgov.exe --cpu=n0:g0 --cpu=n1:g1:0x1 TestLimit.exe
# Use processor group 0 affinity and 1 core from the group 1
procgov.exe --cpu=g0 --cpu=g1:0x1 TestLimit.exe如果您不確定係統中存在哪種CPU配置,則可以在沒有參數的情況下運行procgov,它將打印出來:
procgov.exe
#
# Use --help to print the available options.
#
# === SYSTEM INFORMATION ===
#
# NUMA Node 0:
# Processor Group 0: 000000000000000F (CPUs: 0,1,2,3)
# Processor Group 1: 0000000000000007 (CPUs: 4,5,6)
#
# NUMA Node 1:
# Processor Group 2: 000000000000000F (CPUs: 7,8,9,10)
# Processor Group 3: 0000000000000007 (CPUs: 11,12,13)
#
# Total Physical Memory (MB): 20 460
# Available Physical Memory (MB): 16 086
# Total Committed Memory (MB): 3 701
# Current Committed Memory Limit (MB): 21 740-CPU速率選項允許您設置該過程的最大CPU速率。如果您還設置了CPU親和力,則速率僅適用於選定的內核。例如,如果您的機器上有八個邏輯CPU核心,並且將CPU速率設置為100%,並且CPU親和力為0x7(前四個內核),則監視工具報告了此過程的最高CPU速率(我們以全容量運行,但在CPU編號的一半)。
使用- 超時選項,您可以定義該過程可以在Procgov終止它之前運行的最長時間(時鐘時間)。如果設置了- 收回選項並通過超時,則Progov將終止兒童從監視會話開始開始的所有過程。
-process-utime和-job-utime選項允許您設置一個流程的最大用戶模式執行時間(帶有- 收回選項,也是所有孩子)或工作。後一種情況將有意義,因為它將設置該過程及其子女的總用戶模式執行時間的限制。
- 優先級參數設置了監視過程的過程優先類。可能的值包括: Idle , BelowNormal , Normal , AboveNormal , High , RealTime 。最高的三個優先事項需要seincreasebasepriorityprivilege ,因此請確保您的帳戶擁有(第69期中的更多信息)。
使用-env開關,您可以設置過程環境變量。此開關接受具有變量值的文本文件的路徑,例如:
COR_ENABLE_PROFILING=0x01
COR_PROFILER={32E2F4DA-1BEA-47ea-88F9-C5DAF691C94A}Procgov命令可能如下:
procgov.exe --env c: t emp e nv.txt -c 2 dotnet_app.exe您可以在啟動新過程或訪問現有過程時設置環境變量。
您可以使用- Enable-Privilege Switch在目標過程中啟用特權。您可以多次使用此參數來指定多個特權,例如:
procgov.exe --enable-privilege=SeDebugPrivilege --enable-privilege=SeShutdownPrivilege notepad請記住,在Windows中,您無法在該過程令牌中添加新的特權。您只能啟用現有的。您可以檢查過程黑客或過程資源管理器中的可用過程特權。檢查該文檔以獲取給定特權,以了解如何使給定用戶可用(例如,您可能需要更新組策略)。
在下面,您可能會找到為該項目做出貢獻的人的清單。謝謝你!