MSMQ muito lento para receber mensagens

8

Temos uma configuração bastante grande do ambiente MSMQ que hoje decidiu parar de funcionar.

(Tudo é uma VM no vSphere 4.0 Update 1)

Existem 8 servidores da Web que recebem dados de clientes na rede. Todas essas máquinas têm o MSMQ instalado e simplesmente enviam a mensagem do MSMQ ao servidor principal do MSMQ. As mensagens estão empilhadas no momento na fila de saída. Essas máquinas são o Windows 2008 Web Edition com 2 concessões de RAM e 2 vCPUs.

Temos um servidor MSMQ em cluster (Windows Cluster Server) que recebe as mensagens dos 8 servidores da web. Não há limite para a quantidade de dados que pode estar nas filas. O disco rígido é de 50 Gigs e há 46 Gigs de espaço livre. Essas máquinas são o Windows 2008 Enterprise Edition com 8 concessões de RAM e 4 vCPUs. O cluster costumava ter 2 vCPUs, mas a carga da CPU estava atingindo 100%, por isso aumentei os dois nós do cluster do Windows para 4 vCPUs.

Existem 4 servidores de aplicativos que lêem as mensagens das filas e as processam.

Normalmente tudo isso funciona perfeitamente, mas não hoje.

Hoje de manhã tudo está correndo muito devagar. Os 8 servidores da web estão exibindo até 300k mensagens nas filas de saída. Atualmente, o servidor em cluster mostra mais de um milhão de mensagens nas filas (algumas chegam a 200k).

Se eu olhar o perfmon nos 8 servidores da Web, isso mostra que estou com uma média de 2 mensagens enviadas por segundo. Se eu olhar para perfmon no cluster, ele mostra ~ 7 mensagens por segundo entrando no cluster.

As máquinas que estão lendo não estão recebendo muitas mensagens cada. Os serviços mais rápidos recebem 10 a 12 mensagens por segundo, os mais lentos exibem 0 ou 1.

As únicas mudanças recentemente é que alteramos o número de servidores Web front-end de 4 para 8. Fizemos isso há cerca de duas semanas sem problemas. Na terça-feira, nós os desligamos para ver como os 4 restantes poderiam lidar com a carga. Na quarta-feira, ligamos as quatro máquinas mais recentes.

O disco no cluster mostra E / S muito baixa e sem filas.

Para segurança, atualizei o PowerPath para a versão mais recente, mas isso não ajudou em nada.

Os 8 servidores da web estão em uma vLAN, e os servidores em cluster e os servidores de aplicativos estão em uma segunda vLAN. Não há firewalls entre as vLANs.

E não há nada útil nos logs do aplicativo ou sistema em nenhuma das máquinas.

Mrdenny
fonte
2
Acontece que a causa da leitura lenta do MSMQ foi realmente um problema de aplicativo. Os serviços que são lidos na fila vão para o compartilhamento de arquivos. O compartilhamento de arquivos começou a demorar mais e mais, o que fez com que os serviços fossem executados mais lentamente, o que causou o backup das filas e agora temos uma bagunça. Aparentemente, nossa base de usuários cresceu muito mais rápido do que o planejado e estamos maximizando um dos grupos RAID na SAN que hospeda os compartilhamentos de arquivos. Segunda-feira, faremos um pedido urgente por mais espaço SAN com nosso fornecedor.
21810 mrdenny
2
Não vimos esse crescimento da fila com antecedência, porque nosso servidor de monitoramento é um servidor Windows 2003 e as máquinas com Windows 2003 não podem monitorar remotamente as Filas MSMQ em cluster do Windows 2008. O servidor de monitoramento já está programado para uma atualização em março. <sigh>
mrdenny

Respostas:

4

Sempre que alguém diz que tem mais de um milhão de mensagens, os alarmes disparam! As mensagens exigem que a memória do kernel (pool paginado) seja gerenciada. Se você possui um número tão vasto de mensagens, pode estar esgotando o que está disponível no servidor em cluster. Um número ideal para o número de mensagens em uma fila é zero - basicamente, verifique se você pode processar as mensagens normalmente mais rapidamente do que elas podem chegar.

Eu recomendaria desligar os servidores da Web e processar completamente a lista de pendências de mensagens antes de colocá-las novamente online.

Item de referência 4 desta postagem do blog: http://blogs.msdn.com/johnbreakwell/archive/2006/09/18/insufficient-resources-run-away-run-away.aspx

Saúde John Breakwell (MSFT)


fonte
Eu já recebi uma ligação para o PSS e estou esperando que eles me liguem de volta agora. Eu parei de as mensagens fluírem para a fila nos servidores web. As filas de saída nos servidores web estão todas cheias neste momento, com 1 gig de informações cada. As filas em cluster têm um total de cerca de 4,5 milhões de mensagens cada. Normalmente, mantemos um número muito baixo de mensagens nas filas, à medida que processamos os dados muito rapidamente. Algo aconteceu (não sei o que) e tudo foi para o inferno.
22810 mrdenny
John, obrigado por dar uma olhada para mim. Baseado na saída do tmq, acho que esse é o meu problema. Limitações de pools (calculadas aproximadamente, em KB) Paginadas: limite 307.200 usado para 397% Não paginado: limite 262.144 usado para 49% As filas estão ficando mais lentas enquanto espero que o PSS me ligue de volta. Se você estiver em Redmond durante o MVP Summit, deixe-me saber, cervejas comigo.
22810 mrdenny
@ user34024 encontramos o problema inicial, que eu coloquei em um comentário acima. Obrigado pela ajuda.
mrdenny
1

Perguntei a um de nossos administradores de sistema e ele disse que nosso ponto mágico era 4 servidores da Web atingindo o MSMQ em máquinas virtuais, depois eles foram para o hardware para resolver. Tente também a captura de pacotes para ver o que está acontecendo. Existe muita autenticação no AD também? Com o quão falador o MSMQ é, você precisa limitar os caminhos de rede e, possivelmente, o caminho de autenticação.

HTH, Chuck.

SQLGuyChuck
fonte
Eles conseguiram identificar exatamente o que causou a desaceleração quando você tem mais de 4 servidores da Web conversando com um único servidor MSMQ? O armazenamento é SAN direto por iSCSI, portanto, não deve ser um problema de armazenamento. Vou tentar desligar 4 dos 8 servidores da web e ver o que eu proponho. Se eu tiver que dizer ao meu chefe para comprar hardware novo, vou precisar de um bom motivo.
mrdenny
Apenas a chattiness das mensagens. Eles também encontraram algumas configurações de falta de autenticação.
SQLGuyChuck
Acho que vou baixar o wireshark e colocá-lo no servidor MSMQ e ver o que ele mostra. Não é possível colocá-lo nos servidores Web, ele falha após cerca de 30 segundos devido à carga do tráfego de rede.
mrdenny
Então, iniciei o WireShark na máquina e estou vendo cerca de 3 segundos entre as mensagens do servidor da web que estou monitorando. Escusado será dizer que isso não parece bom.
22810 mrdenny
encontramos o problema inicial, que eu coloquei em um comentário acima. Obrigado pela ajuda.
mrdenny
1

Fazendo referência ao seu comentário sobre falta de administração remota, sim, não é uma boa história com os contadores MSMQ e perf. Para quem segue o tópico e quer saber quais combinações de sistemas operacionais funcionam, dê uma olhada no blog Motley Queue:

Contadores de desempenho do MSMQ 4.0 e a chave do Registro NetNameForPerfCounters http://blogs.msdn.com/motleyqueue/archive/2007/12/14/msmq-4-0-performance-counters-and-the-netnameforperfcounters-registry-key.aspx

Saúde John Breakwell (MSFT)


fonte