Reiniciar o servidor em uma programação seria uma boa ideia para o desempenho?

14

Gostaria de saber se a reinicialização de um servidor em uma agenda seria uma boa idéia para o desempenho.

Digamos que queremos reiniciar o servidor às 02:00 por 2 noites.

O servidor aqui é Windows Server 2008 R2. Principalmente, o SQL Server e o IIS 7.5 (quase 15 aplicativos em execução) estão em execução nesse servidor. O servidor possui 4 GB de memória.

tugberk
fonte
9
Você está realmente tendo problemas de desempenho? O Windows pode durar anos sem ser reiniciado. Não deve demorar tanto sem uma reinicialização, simplesmente porque os patches precisam ser instalados, mas certamente é possível. Pessoalmente, tenho um servidor em uma rede totalmente isolada que está em funcionamento há <checks> 489 dias. Ainda funciona bem e o desempenho é aceitável.
Ben Pilbrow 22/09
6
Suponho que faça isso quando houver uma quantidade limitada de memória ou CPU. - você assume errado.
Rob Moir
4
A pessoa que dá um voto negativo a este post deve explicar o porquê. É uma pergunta bem explicada e nada de errado nisso.
tugberk
17
A coisa certa a fazer é solucionar problemas por que você está tendo problemas, não apenas reiniciá-lo. Os computadores que são reinicializados rotineiramente são chamados de desktops.
Bart Silverstrim
4
Eles podem diminuir o voto porque algumas perguntas também são uma má idéia; um exemplo não vem à mente no momento. Há muitas razoes. Pessoas são estranhas. Contamos com o bom senso geral para superar os maus e os maus julgamentos. É por isso que é um site de perguntas e respostas da comunidade.
Bart Silverstrim

Respostas:

32

Embora eu concorde que não há nada errado em reiniciar a caixa, por si só, com base no seu comentário de que o SQL Server Agent está parando, aconselho algumas análises adicionais de causa raiz. Os serviços geralmente não param e os serviços do SQL Server Agent não agiram dessa maneira na minha experiência, normalmente.

Acho que você faria bem, além de reiniciar, examinar os logs de eventos e executar um contador de desempenho de longo prazo que você pode analisar com o Performance Analysis of Logs (PAL) para ver se "vê" algo errado. Você deve tentar, se nada mais, correlacionar os eventos associados ao SQL Agent parando com outros fatores.

Evan Anderson
fonte
2
"addt'l" ? Erro de análise na linha 2.
Tomas
@tugberk - se essa é a resposta, qual foi a causa do SQL Agent parar após a análise sugerida por Evan?
agosto
@ fofo: Olá! É legal ver você aqui! Não sei se você já conheceu meu "nome verdadeiro". Sou um velho conhecido do Song Fight desde o período de 2003 a 2005. Pense em synth-pop de baixa qualidade e um nome de "banda" que evoca visões de lixões e você deve se lembrar.
Evan Anderson
Bem, isso é bastante offtopic! Oi Ajustador. ;) (Isto, obviamente, devem ser tomadas para e-mail, mas não consigo encontrar o seu endereço).
macia
38

Se você deseja reiniciar o computador para melhorar o desempenho, provavelmente significa que, eventualmente, você está enfrentando problemas de gerenciamento de memória.

O armazenamento em cache é bom

De qualquer forma, a reinicialização dos servidores prejudicaria o desempenho (e o tempo de atividade, é claro) em um ambiente mais ideal . Um dos fundamentos do desempenho em computação é tirar proveito do cache (ter dados disponíveis em memória rápida). Cada vez que você reinicia, você acaba com o cache. Isso vale para o servidor SQL e o IIS. Embora você possa não ter o ambiente ideal, o seguinte deve ajudá-lo a obter uma opção melhor do que reiniciar o servidor em uma programação.

Vazamentos de memória do IIS?

Agora você mencionou que este é o IIS 7.5. Embora eu ache deprimente, muitos aplicativos da Web executados no IIS 7.5 têm vazamentos de memória que os padrões no IIS são reiniciar o APP a cada X minutos e desligá-lo se um pool de aplicativos estiver ocioso. O ideal é corrigir os vazamentos de memória - mas se você não puder, poderá ajustar essas configurações, que incluem limites e temporizadores de memória. Você pode usar o perfmon para descobrir qual processo w3wp está usando a memória. É um pouco trabalhoso, mas você pode vinculá-lo ao pool de aplicativos %systemroot%\system32\inetsrv\APPCMD list wps.

Memória SQL

Voltando ao cache, o SQL utilizará a memória possível. Você pode limitar isso nas propriedades do servidor SQL. Se você não limitar a memória e também estiver executando o IIS na caixa, eles poderão começar a brigar pelo desempenho de perda de memória. Este excelente artigo aborda isso em detalhes: Guia do Sysadmin para memória Microsoft SQL .

Saldo

Como você possui o IIS e o SQL na mesma caixa, precisará equilibrar o uso de memória deles. Caso contrário, você poderá obter a memória que provavelmente será usada novamente trocada para o disco - que é um local terrível para se estar (deve haver contadores de perfmon para a atividade de troca). Usando as configurações de Reciclagem do IIS e os limites de memória SQL, você poderá tornar esse sistema estável. Para equilibrar isso, você pode precisar de mais memória que 4 GB. Além disso, se for uma opção, eu recomendo fortemente colocar o servidor SQL em uma máquina dedicada - isso tornará o desempenho muito melhor e simplificará bastante as coisas.

Kyle Brandt
fonte
Resposta incrível Kyle, gostaria de ter um desses meses atrás nas minhas perguntas relacionadas ao desempenho do SBS2011! Já atingi cada uma das coisas que você menciona em minhas próprias (muitos meses de) pesquisas. Ainda enfrentando problemas, mas isso é outra questão.
precisa saber é o seguinte
12

Eu não sou um defensor da reinicialização de servidores em um cronograma, especialmente como forma de resolver algum problema subjacente. Se você precisar reinicializar este servidor para resolver um problema de desempenho, o melhor curso de ação é encontrar a causa do problema e resolvê-lo. A reinicialização do servidor em uma programação regular apenas ofusca o problema subjacente.

joeqwerty
fonte
5

Se você tem um vazamento significativo de memória, por que não? Reinicie-o mensalmente com atualizações.

Chopper3
fonte
Obrigado pela dica. Agora estou olhando para o gerenciador de tarefas e vendo que o sistema usa 75% da memória.
precisa saber é o seguinte
6
Se estiver executando o SQL Server, isso é de se esperar. O SQL Server tentará (e você deve deixar) usar toda a memória possível.
Ben Pilbrow 22/09/11
4
isso não significa que você tenha vazamentos de memória. A memória está aí para ser usada. E reiniciar para curar vazamentos de memória é uma solução perfeitamente pragmática, mas uma solução melhor a longo prazo é encontrar e corrigir a falha que os causa.
Rob Moir
1
@tugberk: Como afirmei na minha resposta, não é minha experiência que o serviço SQL Server Agent seja interrompido devido a condições de pressão de memória. Presumivelmente, existem condições sob as quais isso aconteceria, mas eu esperaria que você estivesse tendo problemas com outros serviços quando chegasse a esse ponto (porque provavelmente seria bastante grave).
Evan Anderson
2
Se fosse memória, você deveria ver a troca sendo fortemente atingida antes que ela "morresse", eu acho. A memória sempre será usada o máximo possível para armazenar em cache e tal. Você provavelmente deve usar ferramentas para analisar primeiro o uso do banco de dados. E se você estiver executando 15 aplicativos e estiver com pouca memória (15 aplicativos + banco de dados em 4 GB? Qual o tamanho dessas coisas?), Provavelmente já deve estar procurando quebrar o componente de banco de dados do servidor da web em um servidor dedicado.
Bart Silverstrim
2

Se você realmente deseja reiniciar o servidor em um agendamento (devido aos vazamentos ou atualizações de memória mencionados acima ou por qualquer outro motivo) - por que não procurar uma solução de cluster? Coloque outro servidor em paralelo, conecte-os a um balanceador de carga (mesmo que um simples faria) e você poderá reiniciá-los o quanto quiser, sem perder o tempo de serviço ou se preocupando com o fato de o servidor não inicializar e você estará fora.

V. Romanov
fonte
1

Não é uma ideia horrenda , mas se for apenas 'vodu', provavelmente não vai ajudar muito.

No entanto, existem duas razões para não permitir que este seja o fim de sua investigação para melhorar seu desempenho.

Uma é a escalabilidade futura. Se suas interrupções resultarem de carregamento, um determinado número de consultas, uma consulta específica que atinge um bug de cache, compilação de consulta ou indexação de btree ou outros problemas que ocorrem atualmente diariamente, provavelmente ocorrerão com mais freqüência como carregamento aumenta com o tempo. Belisque isso pela raiz.

O outro problema é que suspeito que você precisará interromper solicitações recebidas de serviços dependentes durante a reinicialização. Você acabou de criar uma cadência operacional. Sempre que uma tarefa diária precisar ser executada, ela acabará ligada à sua reinicialização. Em algum momento, você terá essas enormes reinicializações contínuas que levarão seis horas (não estou exagerando aqui, já vi isso acontecer em mais de uma empresa) e ninguém se lembrará de por que tudo precisa ser interrompido e reiniciado no meio Da noite.

Minha recomendação seria monitorar o processo SQL e reiniciar conforme necessário. Como mencionado em um pôster anterior, o SQL não tem o vazamento de memória que as pessoas pensam (e eu digo isso como uma pessoa que estava na equipe do MSSQL em meados dos anos 90). Você deseja que seu servidor de banco de dados use quase 100% de memória e CPU. Qualquer coisa menos está desperdiçando recursos.

Art Taylor
fonte
0

Se você tiver um código mal escrito e vazamentos de memória, a reinicialização poderá ser a única maneira de retornar a memória alocada de volta ao pool. Se você tiver processos ligados à memória, essa atualização do pool para um estado limpo certamente poderá melhorar o desempenho .... por um tempo. Mas essa é realmente uma maneira ruim de lidar com problemas de desempenho, a causa real deve ser definida e corrigida.

Caso contrário, deixe-o funcionar até que você precise de uma janela de manutenção para aplicar patches / aplicativos / restaurar dados. Pode ser um bom momento para sugerir que um engenheiro de desempenho dê uma olhada nos servidores em questão para saber exatamente por que / quais problemas são convincentes.

James Pulley
fonte
0

Embora não seja uma resposta completa per se , mas é uma opção viável adicionar mais RAM ao servidor? 4 GB é um pouco baixo para uma máquina IIS / SQL Server. Dependendo se for uma unidade de servidor realmente dedicada ou uma área de trabalho pressionada para o serviço, você poderá obtê-lo com 8 GB ou mais por um custo bastante baixo. É verdade que, se for um servidor, pode custar um pouco mais do que a RAM padrão da área de trabalho, mas ofereceria um pouco mais de tempo entre as reinicializações forçadas.

Dizendo isso, verifique se você pode limitar o SQL Server a usar no máximo 80% da RAM ou consulte os logs para descobrir exatamente o que está errado e / ou por que o serviço está sendo interrompido.

tombull89
fonte
0

Independentemente do problema de SQL com o qual você esteja lidando, se tiver servidores Windows e seguir qualquer tipo de rotina de correção, reiniciará os servidores regularmente sem precisar reiniciar "apenas porque". Quando trabalhei na "BIG MULTINATIONAL", fomos mandatados para corrigir mensalmente e, como tal, todos os nossos servidores foram reiniciados mensalmente pelo menos uma vez.

Mitch
fonte
0

Estou fazendo isso em 3 servidores, 1 é nosso e 2 clientes. Eu o configurei por várias razões - um servidor 2008R1 tem muitas atualizações pendentes para instalação, mas não posso instalá-las em lote, por isso estou instalando uma por uma todos os dias; outro servidor 2012R2 - para solução de problemas de inicialização e alguns problemas de desempenho, etc. Não acho uma prática ruim agendar uma reinicialização periódica, por outro lado. Isso pode ajudar a rastrear vários problemas de hardware e software, especialmente aqueles envolvidos na inicialização automática .

integratorIT
fonte
-2

Conheço uma grande empresa que não apenas reinicia seus servidores Windows todas as noites, mas alguns deles são reinstalados a cada 24 horas. Para eles, é necessário por causa da falta de memória nos problemas de software e segurança.

Parece que algumas empresas estão reiniciando a cada 24 horas - embora me pareça estranho como administrador de linux. Para deixar claro: eu nunca recomendaria fazer isso por causa de um problema de memória - localize o problema e resolva-o.

Se o uso da memória permanecer fixo em 75% por meses, é possível que não seja necessário reinicializar - é totalmente normal que um aplicativo de servidor use toda a memória disponível - isso aumenta muito o desempenho, pois você precisa de menos IO de disco se usar a RAM para armazenar em cache seus dados.

Subito
fonte
obrigado @Subito. Bem, na verdade sou um desenvolvedor da Web (não um administrador de servidor), mas atualmente preciso manter um servidor. É por isso que estou fazendo essas perguntas simples. Eu acho que você está certo. Mas estou chocado que haja empresas fazendo esse tipo de coisa. Eles não beneficiam nenhum tipo de pagamento do lado do servidor?
precisa saber é o seguinte
Todos os aplicativos são escritos automaticamente e devem ser usados ​​com o DOS ou 3.11. Eles conseguiram obter um banco de dados além desses aplicativos e de alguma forma os portaram para o Server 2008. É um milagre que isso ainda esteja funcionando. Ninguém teria coragem e tentaria alterar tudo para usar caches. Eles têm algumas pessoas que estão sentadas lá esperando por algo travar e, em seguida, reiniciam o aplicativo / servidor / o que for.
Subito 22/09
6
Não, não é "legítimo" reiniciar um servidor a cada 24 horas. Ou eles tenho algumas muito problema caso extremo extremo ou a sua rede e os servidores estão a ser geridos pelos maiores idiotas na profissão.
22611 Rob Moir
sim, eles são realmente os maiores idiotas - mas não é a única empresa que conheço, que está fazendo isso com seus servidores Windows ... Parece ser uma maneira bastante comum de lidar com problemas de memória. - Não me entenda mal, acho um erro terrível, terrível, não investigar e resolver os problemas!
Subito 22/09
7
@ Subito - Na sua resposta, você diz "Parece legítimo reiniciar a cada 24 horas" Isso é um péssimo conselho. Você está dizendo ao OP que é uma ideia legítima enquanto faz referência a uma empresa que você diz estar cheia de idiotas com software horrível. Parece não ser legítimo para mim.
MDMarra