Que restrições o WinRM / WinRS impõe aos processos que executa?

3

Estou usando winrs para executar um cliente de teste em algum software de servidor que estou desenvolvendo. Estou usando o cliente para gerar carga no servidor em teste para criação de perfil. Tanto a máquina em que estou executando o software do servidor quanto o winrs on e a máquina na qual estou executando o cliente de teste (usando winrs na primeira máquina para executá-lo) são caixas Win7, x64, muita memória . Todos os processos são executados como administrador.

Quando executo manualmente o cliente de teste, ele pode gerar 6000 conexões simultâneas e saturar um link de 100 MB (as máquinas em questão têm rede Gb, portanto estou carregando apenas o link entre elas para cerca de 10%). winrs em torno de metade das conexões falha com o que parece ser erros relacionados à memória no OpenSSL.

Tenho certeza de que há algo estranho acontecendo no meu cliente de teste, MAS seria útil saber quais restrições, se houver, poderiam estar em vigor nos processos que o winrm executa em nome de uma solicitação de winrs. Não consegui encontrar nenhum documento que sugira restrições, mas talvez eu não esteja procurando bastante.

Atualização: Tendo pensado sobre isso mais, parece que é provável que os processos estejam sendo executados sob um objeto de trabalho com um limite de memória, isso faz sentido, mas eu diria que se este fosse o caso que seria algo que poderia ser configurado no lado do servidor ...

    
por Len Holgate 04.11.2010 / 14:56

2 respostas

5

Sim, é configurável. Na linha de comando, isso definiria o limite para 500 MB

winrm set winrm / config / winrs @ {MaxMemoryPerShellMB="500"}

pesquise msdn docs em "winrm configuration" para mais informações.

    
por 23.04.2011 / 02:12
2

Bem, parece que estou certo. Os comandos executados por Winrs são executados dentro de um objeto de trabalho e o objeto de trabalho é restrito.

Veja o que um programa simples para descarregar essas restrições de trabalho diz sobre um processo sendo executado em uma das minhas caixas do 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

Os limites que me causaram problemas são os dois últimos. Os limites de memória. Eu ainda não sei se eles são configuráveis por máquina ou por usuário ou em tudo ...

A boa notícia é que o trabalho tem JOB_OBJECT_LIMIT_BREAKAWAY_OK set, o que significa que posso simplesmente escrever um iniciador de programa que eu execute via Winrs, que por sua vez executa o comando target real e lança o novo processo com o CREATE_BREAKAWAY_FROM_JOB flag. Isso faz com que meu processo de destino real seja executado fora das restrições de trabalho do WinRs.

    
por 19.11.2010 / 17:00

Tags