É uma prática de Melhor Indústria reiniciar os servidores da web periodicamente? [fechadas]

28

Temos um aplicativo da web (desenvolvido por terceiros) que é executado no Tomcat. Temos recebido um desempenho muito ruim do aplicativo. O desenvolvedor do aplicativo está alegando que é uma prática recomendada do setor a reinicialização de servidores da web todas as noites, para liberar todo o uso de memória e recomeçar.

Da perspectiva do cliente, que alivia o problema do site travando durante o dia, mas da perspectiva do SysAdmin, é uma solução terrível.

Hospedamos 20 desses aplicativos em diferentes servidores para diferentes clientes, e a coordenação de garantir que todos estejam sendo reiniciados toda noite parece estar errada.

    
por Geo 04.02.2010 / 00:26

9 respostas

29

Esta certamente não é uma prática recomendada. Embora seja bom reinicie seus servidores periodicamente apenas para ter certeza de que tudo está funcionando corretamente, é necessário reiniciar os pontos noturnos para um vazamento de memória muito sério no aplicativo.

    
por 04.02.2010 / 00:30
12

Há uma diferença entre "Melhor Prática", coisas que muitas pessoas fazem por boas razões e "Prática Comum", coisas que muitas pessoas fazem porque são preguiçosas e / ou ignorantes.

Aplicativos e (piores) servidores que precisam ser reiniciados ou reinicializados rotineiramente para continuar funcionando bem são bastante comuns. Mas também é uma indicação clara de que você tem um bug crítico.

Ao fazer com que o SOP reinicie um aplicativo regularmente, sua empresa está escondendo um bug sério sob o tapete. Isso é indesculpável, o bug precisa ser enfrentado e reprimido, ou ele voltará a te morder mais tarde.

Idealmente, sua empresa deve encontrar um desenvolvedor melhor. Infelizmente, isso pode levar a muito trabalho para reescrever grandes trechos do seu código. O fato de o desenvolvedor pensar que um código mal escrito é aceitável, ou não sabe o suficiente para reconhecer os sintomas do código com bugs, sugere que a qualidade do código é baixa. Um bom desenvolvedor será constitucionalmente incapaz de deixá-lo nesse estado.

Como você pode não estar em condições de substituir o desenvolvedor, algumas sugestões:

  • Veja se você pode ter um desenvolvedor melhor para revisar o código e relatar sua avaliação a alguém que possa fazer algo a respeito,
  • Dê uma olhada nas ferramentas de criação de perfil. Se você tem as habilidades e / ou inclinação, tente fazer o perfil do código você mesmo para encontrar o vazamento e denunciá-lo.

Mesmo sem entrar nas ferramentas de criação de perfis orientadas ao desenvolvedor, existem muitas ferramentas orientadas a sysadmin para criar perfis e monitorar o uso da memória em aplicativos Java. Você deve realmente configurar o monitoramento de memória (particularmente heap) em seus servidores de produção em qualquer caso. Eu recomendaria isso mesmo se você estivesse executando um código de qualidade. Pode dar um aviso antecipado quando seus aplicativos com bugs estão prestes a cair.

Mas, melhor ainda, isso deve ajudá-lo a coletar provas de que há um vazamento e pode até indicar onde o problema está no aplicativo. Isso lhe dará uma munição melhor para fazer lobby para que seja corrigido.

    
por 09.07.2010 / 18:01
6

O desenvolvedor do aplicativo está mais propenso a afirmar que é de seu interesse que você cubra o próprio rabo trabalhando em torno do trabalho não profissional que ele fez. Ele pode ter parado de admitir que escreveu algo com um enorme vazamento de memória, mas não muito longe disso.

    
por 04.02.2010 / 01:04
3

Muitas respostas aqui parecem estar fora do alcance de soluções práticas. Eles parecem evitar dogmas - servidores nunca devem ser reiniciados - por que temos 5 noves? tolerância ao erro? Bem, isso é quando eles deveriam estar acordados.

Além disso, declarar que a causa de desenvolvedores ruins ou práticas ruins de desenvolvimento não vai para a raiz do problema. Pode ser mais frequentemente do que não é um código de aplicação ruim. Esses problemas já estão incorporados em grande parte do código do sistema. Vazamentos de memória pequenos, problemas de heap e permgen Java se você estiver executando muitos aplicativos pequenos como fazemos. Servidores modernos e o software que eles executam são muito complexos. Quando você pensa no que um servidor como o tomcat tem que fazer - servir arquivos, processar solicitações da web, comunicações de rede, comunicações de banco de dados, etc., está fazendo muito. Nessa pilha há um monte de partes móveis.

A reinicialização proativa de servidores permite dizer que uma vez por semana ou mês é inteligente e eficiente, na minha opinião. Se você estiver em cluster e girar os servidores, não deverá afetar os clientes nem um pouco. Os clientes ficarão muito mais felizes com o desempenho de seus servidores.

    
por 31.10.2012 / 14:37
2

Os servidores IMO devem ser desligados o mínimo possível. É mais provável que o desenvolvedor de aplicativos tenha criado um aplicativo de má qualidade com vazamento de memória.

    
por 04.02.2010 / 00:29
1

Eu tenho um script para reiniciar um dos nossos servidores da Web todas as noites, mas isso é mais por causa de um aplicativo java mal escrito em vez de um padrão do setor. Eu diria que não é incomum reiniciar os serviços da web. Isso pode fazer a limpeza de memória que você está procurando e colocar menos pressão no servidor em comparação a uma reinicialização completa.

    
por 04.02.2010 / 00:31
1

Um servidor deve preferencialmente nunca ser reiniciado. Essa é uma das razões pelas quais temos tolerância a falhas . Se você precisar reiniciar seu servidor por causa de seus aplicativos, seus aplicativos estão com vazamento de memória e estão mal construídos.

Eu tenho trabalhado com o Tomcat antes, e eu tive o mesmo problema, da próxima vez que eu estiver trabalhando com um contêiner Java, procurarei por outro, talvez JBoss ou GlassFish.

Editar: Se você precisar reiniciá-lo toda noite agora, provavelmente terá que reiniciá-lo com mais freqüência se / quando a carga aumentar. Certifique-se de ter aplicativos sólidos, essa é a melhor solução.

    
por 04.02.2010 / 00:40
0

O mais frequente que já vi é semanal. Onde estou agora, somos uma vitrine, e fazemos isso mensalmente no final de semana seguinte à Patch Tuesday.

    
por 21.04.2011 / 21:49
0

Embora eu concorde que não é ideal reiniciar um servidor constantemente, há situações em que não é culpa do desenvolvedor nem a coisa errada a se fazer. Temos um aplicativo bem comportado que está vazando memória devido a problemas na biblioteca Popen do Python. É um aplicativo antigo que será desativado em breve, mas é essencial para os negócios. Temos que mantê-lo funcionando com um mínimo de barulho para nossos clientes. Então, decidimos reiniciar o servidor todas as noites.

    
por 23.07.2013 / 06:00