2864 Views
Tempo de leitura: 7 MinutosSistemas operacionais podem ficar lentos por diversos motivos. Isso, geralmente, ocorre por mal dimensionamento, crescimento vertiginoso de demanda ou simplesmente falta de manutenção. Veremos a seguir alguns dos principais motivos que levam o sistema a ficar lento. Antes, entendamos por que o sistema fica lento.
Por que o sistema operacional fica lento?
Um sistema com alta demanda de CPU indica que há um problema de performance, e na maioria dos casos interpretarão que a CPU está subdimensionada, pois sobrecarregou, o que não é uma verdade absoluta.
Toda demanda de processamento passa pela CPU, e para qualquer demanda de processamento é alocado parte da CPU total do sistema. A CPU só desaloca esse recurso quando o processamento é concluído. Logo, se o disco demorar para gravar um arquivo, a CPU ficará alocada por mais tempo do que o normal. Havendo processos concorrentes, mais CPU será alocada, e assim a CPU ficará totalmente alocada e começará a enfileirar requisições, incrementando o Load Average e criando essa falsa sensação de que ela, a CPU, é o gargalo desse problema, quando na verdade, neste exemplo, o problema está no disco e/ou no processo de gravação que está onerando toda a CPU.
Fluxo de execução de um processo na CPU
Portanto, é preciso entender o contexto em que esse sistema está inserido, seus processos e analisar muito bem o tipo de missão do servidor, determinando o que é demanda crítica, urgente, importante e o que não é nada disso.
Neste artigo veremos algumas boas práticas para evitar e/ou solucionar problemas de performance em sistemas Linux.
Processos concorrentes e/ou desnecessários
Concorrência em sistema é coisa séria, e gerenciá-las é fundamental. Processos concorrentes com alta demanda de consumo de recursos como disco e memória criam ciclos de consumos que podem oscilar ou manter o processamento alto e constante. Separar serviços “core” em mais de um sistema é importante, pois dado seus sensos de urgência, colocá-los para concorrer pode ser um problema.
Por exemplo: Um banco de dados que é executado no mesmo sistema que executa uma aplicação pode criar essas concorrências. Mais cedo ou mais tarde haverá picos.
E nunca confunda concorrência com paralelismo. Processos paralelos são processos executados de forma saudável no ponto de vista do sistema. Processos concorrentes são processos de disputam recursos e causam degradação.
Outro ponto; alguns processos como compressão de arquivos demandam muito processamento, e quanto melhor o algoritmo de compressão, mais CPU e disco utilizará.
Uma boa prática aqui é evitar execução de serviços “core” em um mesmo sistema e executar processos pesados como backup e compressão para horários não comerciais.
Backup impactando na produção
Há sistemas que não podem ficar inoperantes mesmo de madrugada quando, geralmente, executamos o backup. Nesse momento a lentidão pode ocorrer por haver gravação local, no mesmo disco onde o sistema encontra-se em execução, por criar concorrência na interface de rede ou por consumir muita memória devido a questões como compressão.
Nesse tipo de caso é interessante fazer a gravação em um storage, por exemplo, o que evitará gravação local. Usar uma interface de rede apartada da rede de produção também é uma boa prática, pois assim o backup pode concluir mais rapidamente.
Se essas opções não são aplicáveis, então é preciso trabalhar com prioridade de processos usando os comandos nice
, renice
e ionice
como já mencionado aqui no site. Segue link:
https://www.blogporta80.com.br/2022/04/17/linux-gerenciando-prioridades-de-processos/
Configuração errada de Swap
Sim, a Swap, se mal configurada, pode impactar na performance do sistema. Otimizar a memória Swap é fundamental para o bom funcionamento do sistema, haja visto que o sistema usa Swap mesmo quando há memória RAM livre.
No artigo a seguir há uma explicação completa sobre Swappiness, o parâmetro de determina como o sistema trabalhará com Swap. Segue o link:
https://www.blogporta80.com.br/2020/04/26/artigo-o-que-e-swappiness-e-como-configura-lo/
Falta de manutenção
Falta de manutenção também é um problema sério para sistemas lentos. Consumo elevado de disco útil, ou seja, de arquivos armazenados, pode ser um problema. O sistema tende a ficar mais lento com o passar do tempo. Saber o momento de remover arquivos antigos ou movê-los para outro sistema é muito importante.
Outro ponto importante é o padrão de montagem de discos. Trabalhar corretamente com noatime
pode dar a você melhores entregas quanto a performance de gravação.
Manter a checagem de integridade de filesystem ligado é crucial. Ele garante que o filesystem esteja íntegro e faz isso no boot do sistema. Caso encontre erros, tentará repará-los.
Há outras manutenções importantes que precisam ser feitas, mas falaremos mais a diante.
Subdimensionamento
Se nada foi negligenciado e nada encontra-se em inconformidade, ou seja, não há processos pesados com concorrência, o filesystem está otimizado, pacotes são atualizados com frequência e nenhum gargalo ou item de falha encontra-se degradado ou indisponível, então é hora de pensar em escalar a infraestrutura, pois é provável tratar-se um problema de configuração subdimensionada para a demanda.
Ou seja, você tem uma configuração “X” para uma demanda “Y”, onde “Y” é maior do que “X”. Nesse caso a conta não fecha e criará degradação de serviço, e qualquer pico nessa demandará poderá resultar em quedas e/ou indisponibilidade total do sistema. É hora de fazer um upgrade e tirar o escorpião do bolso.
Harding e Tuning
Hardening é a ação de desativar serviços desnecessários para as entregas do sistema. Por exemplo, você tem um Postgres instalado e em execução, mas não o utiliza. No caso de fazer um hardening, você precisará desativá-lo, pois além de liberar recursos do sistema, ainda aumentará a segurança do mesmo, pois menos uma porta estará de pé para ser explorada.
Já o tuning é a ação de ajustar configurações para melhorar a performance daquilo que precisa ser entregue. Por exemplo, cada conexão estabelecida no sistema é mantida por até 60 segundos até que o sistema corte essa conexão. Caso essa conexão TCP não precise ficar ativa por tanto templo, você pode otimizá-la para consumir menos tempo. Esse é um parâmetro do Kernel Linux chamado net.ipv4.tcp_fin_timeout
que pode ser ajustada via /etc/sysctl.conf.
O sistema, quando instalado, configura algumas coisas com base na quantidade de CPU e Memória disponível no sistema. Porém nem sempre isso atende nossas necessidades. Há diversos parâmetros que podem ser otimizados no Kernel Linux.
Logo mais subirei um artigo aqui no site com dicas de tuning. Por ora, há uma grande variedade de documentações na Web falando disso.
Atualização de pacotes
Claro que eu não poderia deixar de fora a dica 10/10 de mantenimento de sistemas; a atualização de pacotes. Além de corrigir bugs, a atualização provê maior segurança ao sistema.
Tenha sempre um plano de rollback caso algo de errado, mas nunca deixe de atualizar seus sistemas
Monitoração e acompanhamento constante
Acompanhar seus sistemas é fundamental. É inerente à função de Sysadmin conhecer seus sistemas, saber o que está executando e como o executa para saber decidir o que de melhor pode ser feito para incrementar a performance.
Não há um meio mais apropriado do que a monitoração. Cada item de falha, ou seja, cada coisa que pode indisponibilizar seus sistemas deve ser monitorada.
Logs
Observe seus arquivos de log. Verifique o conteúdo dos logs e desative esses registros desnecessários, pois a gravação em arquivos de log consome recursos, e se são logs desnecessários, são consumos que podem interferir no processamento de coisas importantes.
E ainda falando de logs, por fim, sempre os consulte. Os logs dmesg
e /var/log/messages
ou /var/log/syslog
são seus melhores amigos. Logs não mentem!
Resumo
Tudo estará certo enquanto estiver certo, e quando não estiver, é importante conhecer o ambiente para saber o que de melhor pode ser feito para normalizar seu funcionamento. Tudo se resume a isso.
Lembrando que upgrade não é solução para problemas de performance sem que, antes, saiba a causa do problema. Nesse caso, fazer upgrade é, além de um tiro no escuro, pode se tornar uma tentativa frustrada e cara ao não surtir efeito esperado.
Encontrar a causa raiz e atacá-la é o segredo de Tostines.
Resumidamente falando, são boas práticas administrativas:
- Evitar execução de serviços “core” em um mesmo servidor;
- Evitar processos concorrentes;
- Evitar rotinas pesadas de administração, auditoria e backup;
- Realizar tarefas administrativas em horário não comercial;
- Aplicar prioridade adequada para cada tarefa executada no sistema;
- Manter o filesystem íntegro com checagens periódicas;
- Manter o filesystem otimizado quanto a gravação de arquivos;
- Controlar logs e evitar registros desnecessários;
- Desativar serviços desnecessários no sistema – hardening;
- Otimizar parâmetros do Kernel para tirar mais eficiência;
- Mantenha seu sistema atualizados;
- Monitore seus logs e seus sistemas.
Esse foi um artigo bem resumido e meio genérico; nada muito contundente. Logo mais farei um artigo sobre hardening e tuning, gravação de arquivos em cache e falarei um pouco mais sobre filesystem. Por ora é isso. Um abraço e até a próxima.