servidor de terminal Windows 2003/2008, Aplicação usando 95-100% da CPU quando caiu, processo de auto kill?

2

Atualmente hospedamos dois servidores de terminal para nossos usuários se conectarem ao Citrix Metaframe. Um dos aplicativos que hospedamos lá é um aplicativo interno que foi programado há muito tempo, específico para as operações de depósito de nossa empresa. Às vezes, os usuários executam consultas neste aplicativo que trava o aplicativo, deixando-o para consumir 95-100% da CPU. O usuário pode, então, abrir uma segunda entidade do aplicativo, apenas para colidir com aquela, mais tarde naquele dia.

Estou monitorando o uso da CPU dos servidores via pesquisa SNMP. Então toda vez que um alarme me diz que o servidor está sob carga pesada, eu estou logando manualmente como admin para matar o processo travado. Isso acontece aproximadamente 2 vezes ao dia. O servidor de terminal fica paralisado até que o processo seja interrompido (leva até 2 a 3 minutos para fazer logon), afetando gravemente todos os outros usuários.

Existe alguma ferramenta ou procedimento que eu possa implementar para me ajudar com isso? Eu preciso disso para verificar o alto uso da CPU em processos específicos. Se uma CPU alta for encontrada para o aplicativo e for observada por um determinado período de tempo, KILL IT! (não pode matar o aplicativo se o uso da CPU aumentar temporariamente).

Já experimentei várias ferramentas "Auto kill", mas não encontrei nenhuma que possa direcionar arquivos .exe específicos para a CPU ao longo do tempo.

    
por Ole Thomas 22.04.2011 / 17:13

3 respostas

1

Eu não tenho uma recomendação de ferramenta específica para o que você quer, mas pelo menos como um quick-and-dirty você provavelmente pode remendar algo junto com um par de ferramentas Sysinternals. Você pode ser capaz de executar isso de forma não interativa (programada), mas definitivamente não seria um serviço.

  1. Use o Procdump para monitorar o uso de processos da CPU com o nome do processo apropriado (com base no executável). Quando um processo atingir os níveis configurados, gere um dump. Possivelmente inicie isso a partir de um arquivo .cmd em loop com uma leve espera, para que cada instância do procdump só despeje uma única vez, ou possivelmente use a opção -n para especificar um grande número de dumps antes de sair.
  2. Monitore seu diretório de saída de despejo para novos arquivos. Analise os PIDs conforme necessário e, em seguida, mate os arquivos ou não - não parece que você depure e conserte o aplicativo.
  3. Use o PsKill para eliminar o processo relevante.

Como com qualquer coisa reunida, isso pode ou não funcionar bem ou ser estável a longo prazo, mas se a opção preferida (corrigir o aplicativo problemático) não for viável, você será reduzido para a segunda sequência de qualquer maneira.

As ferramentas da Sysinternals estão agora disponíveis na Microsoft em link

    
por 22.04.2011 / 17:41
1
O

Gerenciador de Recursos de Sistema do Windows (WSRM) deve ajudá-lo com isso: link (configuração do serviço de terminal aqui )

Na verdade, nunca precisei usá-lo, mas ele afirma ser capaz de criar políticas para controlar memória e cpu recursos para aplicativos e serviços. Veja um artigo destinado a < strong> srv 2003

    
por 22.04.2011 / 17:47
0

Você pode usar o para isso. É na primeira etapa um simples liner e você pode executar o script do PowerShell com o agendador de tarefas para verificar se o aplicativo trava.

$process = Get-Process -Name $application
If ($process.CPU -igt 90.00) {Stop-Process -InputObject $process -Force}

Para executar o script, você deve iniciar o powershell com o script como argumento:

powershell.exe "& '$path'"
    
por 10.04.2015 / 13:32