此应用程序允许您在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中,您无法在该过程令牌中添加新的特权。您只能启用现有的。您可以检查过程黑客或过程资源管理器中的可用过程特权。检查该文档以获取给定特权,以了解如何使给定用户可用(例如,您可能需要更新组策略)。
在下面,您可能会找到为该项目做出贡献的人的清单。谢谢你!