C # App (mono) rodando dentro da janela de encaixe dá enormes picos de CPU

1

Eu tenho olhado isso por um bom tempo. Nós rodamos um servidor que tem vários contêineres do Docker, um deles tem um aplicativo de servidor Mono escrito em c #.

A imagem de base é a base de fusion ( link )

Isso está funcionando bem até agora, esta noite, de repente, começamos a observar enormes picos de CPU, tornando nosso site inteiro mais lento, até mesmo tornando-o completamente inacessível.

Eu não mudei nada desde uma semana ou mais. Eu duvido que esse problema tenha ocorrido devido a um erro no código-fonte. Também o mesmo aplicativo (como exatamente no mesmo executável) funciona bem no mesmo servidor fora do docker ou no meu mac. Coisas que tentei:

  • Executando o aplicativo no meu computador local (funcionou, sem picos de CPU)
  • Execução do aplicativo fora do docker (mas no mesmo servidor) (sem picos de CPU)
  • Reconstruindo imagem sem cache (não funcionou)

Veja a captura de tela da nossa árvore de processos:

Se alguém puder nos ajudar, seria fantástico! Estou mais do que disposto a dar mais detalhes;) Muito obrigado antecipadamente!

    
por user125756 17.09.2015 / 23:08

1 resposta

2

Ok, eu achei! Aparentemente, o processo foi preso em um loop while, porque ele escuta comandos em stdin.

Os picos de CPU estavam sempre lá, mas nós nunca notamos (até que fizemos um teste maior com mais pessoas no site), então depois de pesquisar, descobri que você pode fazer isso para "fechar" o stdin para garantir que não Continue lendo para dados em segundo plano:

read x < /dev/fd/1 | <command>

Onde comando é o seu comando que está aumentando a cpu.

Para mim, o comando completo foi:

cd /opt/SteamBot && read x < /dev/fd/1 | mono --debug SteamBot.exe

A CPU agora caiu para 7%;)

    
por 18.09.2015 / 10:45