WinRM/WinRS 对其运行的进程有何限制?

WinRM/WinRS 对其运行的进程有何限制?

我用winrs它来针对我正在开发的某些服务器软件运行测试客户端。我使用客户端在被测服务器上生成负载以进行分析。我运行服务器软件的机器和winrs我运行测试客户端的机器(winrs在第一台机器上使用)都是 Win7 机器,x64,内存很大。所有进程都以管理员身份运行。

当我手动运行测试客户端时,它可以生成 6000 个并发连接并使 100mb 链接饱和(有问题的机器有 Gb 网络,所以我只将它们之间的链接加载到大约 10%)当我通过winrs大约一半的连接运行它时,似乎与 OpenSSL 中的内存相关的错误导致连接失败。

我确信我的测试客户端中发生了一些奇怪的事情,但了解 winrm 代表 winrs 的请求运行的进程可能存在哪些限制(如果有的话)会很有用。我找不到任何文档表明存在限制,但我可能没有仔细查找。

更新:经过进一步思考之后,似乎这些进程可能是在具有内存限制的作业对象下运行的,这有点道理,但我认为如果是这种情况,那么可以在服务器端进行配置...

答案1

是的,它是可配置的。从命令行,这将把限制设置为 500MB

winrm 设置 winrm/config/winrs @{MaxMemoryPerShellMB="500"}

在 msdn 文档中搜索“winrm 配置”以获取更多信息。

答案2

嗯,看来我是对的。Winrs 执行的命令是在作业对象内部运行的,而作业对象受到限制。

这是一个用于转储这些作业限制的简单程序,它显示了在我的一台 Windows 7 机器上执行的一个进程。

Job report for process: 10676
Process IS in a job
Flags: 0x2b08 - 
   JOB_OBJECT_LIMIT_ACTIVE_PROCESS
   JOB_OBJECT_LIMIT_PROCESS_MEMORY
   JOB_OBJECT_LIMIT_JOB_MEMORY
   JOB_OBJECT_LIMIT_BREAKAWAY_OK
   JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE

ActiveProcessLimit: 15
Affinity: 0x0
MaximumWorkingSetSize: 0
MinimumWorkingSetSize: 0
PerJobUserTimeLimit: 0
PerProcessUserTimeLimit: 0
PriorityClass: 32
SchedulingClass: 5
JobMemoryLimit: 157286400
ProcessMemoryLimit: 157286400

导致我出现问题的限制是下面两个。内存限制。我仍然不知道这些是否可以按机器或按用户配置,或者根本无法配置……

好消息是该作业已JOB_OBJECT_LIMIT_BREAKAWAY_OK设置,这意味着我可以简单地编写一个通过 Winrs 运行的程序启动器,它本身会运行实际的目标命令并使用该CREATE_BREAKAWAY_FROM_JOB标志启动新进程。这会导致我的真实目标进程在 WinRs 作业限制之外运行。

相关内容