A execução do Process Monitor faz com que o aplicativo funcione

0

Este é um resultado final, mas talvez alguém com conhecimento do funcionamento interno do Process Monitor da Sysinternal possa ter uma idéia.

Recentemente, tivemos um problema muito obscuro no trabalho. Nós temos um software (chame-o de SW1) que cria uma conexão de soquete em uma porta específica com outro software (chame-o de SW2) e recebe alguns dados deste software. Em seguida, ele cria outra conexão de soquete com outro processo pertencente a ele e envia alguns dados, após os quais o ciclo é reiniciado e começa a receber mais alguns dados do SW2.

Esta é uma descrição muito vaga e não tenho nada a ver com nenhum desses aplicativos, no entanto, como o proprietário das estações de trabalho em que estive strongmente envolvido no suporte. Todo este sistema funcionou sem problemas em uma determinada estação de trabalho, no entanto, recusou-se a trabalhar em outras quatro estações de trabalho idênticas. O sintoma foi uma parada súbita dos pacotes enviados entre os dois processos do SW1, naturalmente seguidos por um tempo limite por SW2.

Agora, para o maluco: Depois de semanas de depuração com as equipes relevantes e executando o Wireshark, decidi executar o Process Monitor, talvez algo aparecesse. Estranhamente, as conexões do soquete permaneceram estabelecidas e tudo funcionou! Pensando que foi uma coincidência, tentamos executar o monitor de processos nos outros três e todos eles começaram a trabalhar. Além disso, parece que reiniciar tudo ainda mantém os aplicativos funcionando.

É claro que a questão permanece: qual impacto o Process Monitor pode ter sobre esses aplicativos? Devido à natureza da solução, não consigo analisar uma captura de procmons, já que parece estar resolvendo o problema. questão ...

Obrigado!

    
por lcam 22.08.2017 / 12:27

1 resposta

0

Parece uma condição de corrida ou dead lock .

Ou seja, o SW1 e o SW2 devem ter um protocolo de comunicação com solicitações e confirmações. Se este protocolo não for bem projetado, pode haver uma condição de corrida, na qual os pacotes não são enviados na ordem correta. O SW1 é empilhado esperando por um pacote do SW2, mas que o SW2 já enviou no passado (e o SW1 errou) e o SW2 não irá enviá-lo novamente, tornando-se um estado de bloqueio no SW1.

Se este for o caso, a falha depende da velocidade de execução de SW1 e SW2 e, mais ainda, da carga dos servidores. Vamos dizer, se ambos os processos estão sendo executados lentamente, é mais difícil que o SW1 perca o pacote do SW2, que cria o estado de bloqueio. A execução do monitor do sistema reduz a velocidade do sistema, o que pode ser suficiente para que isso funcione.

Quanto aos servidores diferentes, se o primeiro servidor tiver mais carga do que os outros, então, você tem, funciona.

    
por 22.08.2017 / 13:00