Pesquisa de site

Como monitorar o uso do sistema, interrupções e solucionar problemas de servidores Linux - Parte 9


Embora o Linux seja muito confiável, administradores de sistema sábios devem encontrar uma maneira de ficar de olho no comportamento e na utilização do sistema em todos os momentos. Garantir um tempo de atividade o mais próximo possível de 100% e a disponibilidade de recursos são necessidades críticas em muitos ambientes. Examinar o estado passado e atual do sistema nos permitirá prever e, muito provavelmente, prevenir possíveis problemas.

Apresentando o Programa de Certificação Linux Foundation

Neste artigo apresentaremos uma lista de algumas ferramentas disponíveis na maioria das distribuições upstream para verificar o status do sistema, analisar interrupções e solucionar problemas contínuos. Especificamente, da miríade de dados disponíveis, nos concentraremos na CPU, no espaço de armazenamento e na utilização de memória, no gerenciamento básico de processos e na análise de logs.

Utilização do espaço de armazenamento

Existem 2 comandos bem conhecidos no Linux que são usados para inspecionar o uso do espaço de armazenamento: df e du.

O primeiro, df (que significa disco livre), normalmente é usado para relatar o uso geral do espaço em disco por sistema de arquivos.

Exemplo 1: Relatando o uso de espaço em disco em bytes e formato legível

Sem opções, df reporta o uso do espaço em disco em bytes. Com o sinalizador -h ele exibirá as mesmas informações usando MB ou GB. Observe que este relatório também inclui o tamanho total de cada sistema de arquivos (em blocos de 1 K), os espaços livres e disponíveis e o ponto de montagem de cada dispositivo de armazenamento.

df
df -h

Isso certamente é bom – mas há outra limitação que pode inutilizar um sistema de arquivos: ficar sem inodes. Todos os arquivos em um sistema de arquivos são mapeados para um inode que contém seus metadados.

Exemplo 2: inspecionando o uso de inodes por sistema de arquivos em formato legível por humanos com
df -hTi

você pode ver a quantidade de inodes usados e disponíveis:

De acordo com a imagem acima, existem 146 inodes usados (1%) em /home, o que significa que você ainda pode criar arquivos de 226K nesse sistema de arquivos.

Exemplo 3: Encontrar e/ou excluir arquivos e diretórios vazios

Observe que você pode ficar sem espaço de armazenamento muito antes de ficar sem inodes e vice-versa. Por esse motivo, você precisa monitorar não apenas a utilização do espaço de armazenamento, mas também o número de inodes usados pelo sistema de arquivos.

Use os seguintes comandos para encontrar arquivos ou diretórios vazios (que ocupam 0B) que estão usando inodes sem motivo:

find  /home -type f -empty
find  /home -type d -empty

Além disso, você pode adicionar o sinalizador -delete no final de cada comando se também quiser excluir esses arquivos e diretórios vazios:

find  /home -type f -empty --delete
find  /home -type f -empty

O procedimento anterior excluiu 4 arquivos. Vamos verificar novamente o número de nós usados/disponíveis em /home:

df -hTi | grep home

Como você pode ver, existem 142 inodes usados agora (4 a menos que antes).

Exemplo 4: Examinando o uso do disco por diretório

Se o uso de um determinado sistema de arquivos estiver acima de uma porcentagem predefinida, você pode usar du (abreviação de uso de disco) para descobrir quais são os arquivos que estão ocupando mais espaço.

O exemplo é dado para /var, que como você pode ver na primeira imagem acima, é usado em 67%.

du -sch /var/*

Nota: você pode alternar para qualquer um dos subdiretórios acima para descobrir exatamente o que há neles e quanto cada item ocupa. Você pode então usar essas informações para excluir alguns arquivos, se não forem necessários, ou estender o tamanho do volume lógico, se necessário.

Leia também

  1. 12 comandos “df” úteis para verificar o espaço em disco
  2. 10 comandos “du” úteis para encontrar o uso de arquivos e diretórios no disco

Utilização de memória e CPU

A ferramenta clássica do Linux usada para realizar uma verificação geral da utilização de CPU/memória e gerenciamento de processos é o comando superior. Além disso, top exibe uma visão em tempo real de um sistema em execução. Existem outras ferramentas que podem ser usadas para o mesmo propósito, como o htop, mas optei pelo top porque ele é instalado imediatamente em qualquer distribuição Linux.

Exemplo 5: Exibindo um status ativo do seu sistema com top

Para começar, basta digitar o seguinte comando em sua linha de comando e pressionar Enter.

top

Vamos examinar um resultado principal típico:

Nas linhas 1 a 5, as seguintes informações são exibidas:

1. A hora atual (20h41min32s) e o tempo de atividade (7 horas e 41 minutos). Apenas um usuário está conectado ao sistema e a média de carga durante os últimos 1, 5 e 15 minutos, respectivamente. 0,00, 0,01 e 0,05 indicam que durante esses intervalos de tempo, o sistema ficou ocioso por 0% do tempo (0,00: nenhum processo estava esperando pela CPU), depois ficou sobrecarregado em 1% (0,01: uma média de 0,01 processos estavam esperando pela CPU) e 5% (0,05). Se for menor que 0 e menor o número (0,65, por exemplo), o sistema ficou ocioso por 35% durante os últimos 1, 5 ou 15 minutos, dependendo de onde 0,65 aparecer.

2. Atualmente existem 121 processos em execução (você pode ver a listagem completa em 6). Apenas 1 deles está em execução (o topo neste caso, como você pode ver na coluna %CPU) e os 120 restantes estão esperando em segundo plano, mas estão “dormindo” e permanecerão nesse estado até que os chamemos. Como? Você pode verificar isso abrindo um prompt do mysql e executando algumas consultas. Você notará como o número de processos em execução aumenta.

Alternativamente, você pode abrir um navegador da web e navegar para qualquer página que esteja sendo servida pelo Apache e obterá o mesmo resultado. Obviamente, esses exemplos pressupõem que ambos os serviços estejam instalados em seu servidor.

3. us (tempo de execução de processos de usuário com prioridade não modificada), sy (tempo de execução de processos do kernel), ni (tempo de execução de processos de usuário com prioridade modificada), wa (tempo de espera pela conclusão de E/S), hi (tempo gasto atendendo interrupções de hardware), si (tempo gasto atendendo interrupções de software), st (tempo roubado da VM atual pelo hipervisor – apenas em ambientes virtualizados).

4. Uso de memória física.

5. Troque o uso do espaço.

Exemplo 6: inspecionando o uso da memória física

Para inspecionar a memória RAM e o uso de swap, você também pode usar o comando free.

free

É claro que você também pode usar as opções -m (MB) ou -g (GB) para exibir as mesmas informações em formato legível:

free -m

De qualquer forma, você precisa estar ciente do fato de que o kernel reserva o máximo de memória possível e a disponibiliza aos processos quando eles a solicitam. Particularmente, a linha “-/+ buffers/cache” mostra os valores reais após esse cache de E/S ser levado em consideração.

Em outras palavras, a quantidade de memória utilizada pelos processos e a quantidade disponível para outros processos (neste caso, 232 MB utilizados e 270 MB disponíveis, respectivamente). Quando os processos precisarem dessa memória, o kernel diminuirá automaticamente o tamanho do cache de E/S.

Leia também: 10 comandos “gratuitos” úteis para verificar o uso de memória do Linux

Analisando mais de perto os processos

A qualquer momento, há muitos processos em execução em nosso sistema Linux. Existem duas ferramentas que usaremos para monitorar processos de perto: ps e pstree.

Exemplo 7: Exibindo toda a lista de processos em seu sistema com ps (formato padrão completo)

Usando as opções -e e -f combinadas em uma (-ef) você pode listar todos os processos que estão atualmente em execução no seu sistema. Você pode canalizar essa saída para outras ferramentas, como grep (conforme explicado na Parte 1 da série LFCS) para restringir a saída ao(s) processo(s) desejado(s):

ps -ef | grep -i squid | grep -v grep

A listagem de processos acima mostra as seguintes informações:

proprietário do processo, PID, PID pai (o processo pai), utilização do processador, hora em que o comando foi iniciado, tty (o? indica que é um daemon), o tempo de CPU acumulado e o comando associado ao processo.

Exemplo 8: Personalizando e classificando a saída de ps

No entanto, talvez você não precise de todas essas informações e gostaria de mostrar o proprietário do processo, o comando que o iniciou, seu PID e PPID e a porcentagem de memória que está usando atualmente – nessa ordem, e classificar por uso de memória em ordem decrescente (observe que ps por padrão é classificado por PID).

ps -eo user,comm,pid,ppid,%mem --sort -%mem

Onde o sinal de menos na frente de %mem indica classificação em ordem decrescente.

Se por algum motivo um processo começar a consumir muitos recursos do sistema e for provável que comprometa a funcionalidade geral do sistema, você desejará interromper ou pausar sua execução, passando um dos seguintes sinais usando o programa kill para ele. Outros motivos pelos quais você consideraria fazer isso é quando você iniciou um processo em primeiro plano, mas deseja pausá-lo e retomá-lo em segundo plano.

Signal name Signal number Description
 SIGTERM 15  Kill the process gracefully.
 SIGINT 2  This is the signal that is sent when we press Ctrl + C. It aims to interrupt the process, but the process may ignore it.
 SIGKILL 9  This signal also interrupts the process but it does so unconditionally (use with care!) since a process cannot ignore it.
 SIGHUP 1  Short for “Hang UP”, this signals instructs daemons to reread its configuration file without actually stopping the process.
 SIGTSTP 20  Pause execution and wait ready to continue. This is the signal that is sent when we type the Ctrl + Z key combination.
 SIGSTOP 19  The process is paused and doesn’t get any more attention from the CPU cycles until it is restarted.
 SIGCONT 18  This signal tells the process to resume execution after having received either SIGTSTP or SIGSTOP. This is the signal that is sent by the shell when we use the fg or bg commands.
Exemplo 9: Pausar a execução de um processo em execução e retomá-lo em segundo plano

Quando a execução normal de um determinado processo implica que nenhuma saída será enviada para a tela enquanto ele está em execução, você pode iniciá-lo em segundo plano (anexando um e comercial no final do comando).

process_name &

ou,
Assim que começar a rodar em primeiro plano, pause-o e envie-o para segundo plano com

Ctrl + Z
kill -18 PID

Exemplo 10: Matar à força um processo que “enlouqueceu”

Observe que cada distribuição fornece ferramentas para parar/iniciar/reiniciar/recarregar serviços comuns, como service em sistemas baseados em SysV ou systemctl em sistemas baseados em systemd.

Se um processo não responder a esses utilitários, você poderá eliminá-lo à força, enviando-lhe o sinal SIGKILL.

ps -ef | grep apache
kill -9 3821

Então... O que aconteceu/está acontecendo?

Quando houver qualquer tipo de interrupção no sistema (seja uma queda de energia, uma falha de hardware, uma interrupção planejada ou não planejada de um processo ou qualquer anormalidade), os logs em /var/log são seus melhores amigos para determinar o que aconteceu ou o que pode estar causando os problemas que você está enfrentando.

cd /var/log

Alguns dos itens em /var/log são arquivos de texto normais, outros são diretórios e ainda outros são arquivos compactados de logs rotacionados (históricos). Você vai querer verificar aqueles com a palavra erro no nome, mas inspecionar o resto também pode ser útil.

Exemplo 11: Examinando logs em busca de erros em processos

Imagine este cenário. Seus clientes LAN não conseguem imprimir em impressoras de rede. O primeiro passo para solucionar esta situação é acessar o diretório /var/log/cups e ver o que há nele.

Você pode usar o comando tail para exibir as últimas 10 linhas do arquivo error_log ou tail -f error_log para uma visualização em tempo real do log.

cd /var/log/cups
ls
tail error_log

A captura de tela acima fornece algumas informações úteis para entender o que pode estar causando o seu problema. Observe que seguir as etapas ou corrigir o mau funcionamento do processo ainda pode não resolver o problema geral, mas se você se acostumar desde o início a verificar os logs sempre que surgir um problema (seja local ou de rede), você Estarei definitivamente no caminho certo.

Exemplo 12: Examinando os logs em busca de falhas de hardware

Embora as falhas de hardware possam ser difíceis de solucionar, você deve verificar o dmesg e os logs de mensagens e usar o grep para encontrar palavras relacionadas a uma peça de hardware considerada defeituosa.

A imagem abaixo foi retirada de /var/log/messages após procurar a palavra erro usando o seguinte comando:

less /var/log/messages | grep -i error

Podemos ver que estamos tendo problemas com dois dispositivos de armazenamento: /dev/sdb e /dev/sdc, que por sua vez causam um problema com a matriz RAID.

Conclusão

Neste artigo exploramos algumas das ferramentas que podem ajudá-lo a estar sempre atento ao status geral do seu sistema. Além disso, você precisa se certificar de que seu sistema operacional e os pacotes instalados estão atualizados para as versões estáveis mais recentes. E nunca, jamais, esqueça de verificar os registros! Então você estará na direção certa para encontrar a solução definitiva para quaisquer problemas.

Sinta-se à vontade para deixar seus comentários, sugestões ou dúvidas - se tiver alguma - através do formulário abaixo.