WinRM / WinRS对它所运行的进程有什么限制?

我正在使用winrs来运行我正在开发的一些服务器软件的testing客户端。 我正在使用客户端来生成testing服务器上的负载以进行分析。 我正在运行服务器软件和winrs的机器以及运行testing客户机的机器(在第一台机器上使用winrs来运行它)是Win7盒子,x64,大量的内存。 所有进程都以pipe理员身份运行。

当我手动运行testing客户端时,它可以产生6000个并发连接,并饱和一个100MB的链接(有问题的机器有Gbnetworking,所以我只加载他们之间的链接约10%)当我运行它通过winrs约一半的连接失败,似乎是在OpenSSL内存相关的错误。

我确定在我的testing客户端中有一些奇怪的事情,但是知道winrm代表winrs请求运行的进程是否有适当的限制是很有用的。 我还没有find任何文件表明有限制,但我可能不够努力。

更新:考虑到这一点似乎有可能,这些进程是在一个内存限制的工作对象下运行,这有点合理,但我会假设,如果这是这样的话可以在服务器端configuration…

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

winrm set winrm / config / winrs @ {MaxMemoryPerShellMB =“500”}

searchMSDN文档“winrmconfiguration”了解更多信息。

好吧,看来我是对的。 由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 

造成我的问题的限制是底部两个。 内存限制。 我仍然不知道这些是可以configuration每台机器或每个用户或所有…

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