Servidor Red Hat 7.9 com 512 GB de RAM.
Muitas vezes recebemos alertas sobre o swap estar cheio. A troca é frequentemente usada em 99%. Nosso administrador de servidor nos disse que é normal que o Linux tenha o swap usado 100%. Não há como verificar o consumo real de RAM.
O nosso está sempre em torno de 99% em nosso servidor usando SAR:
Memory & Swap
=============
kbmemfree kbmemused %memused kbbuffers kbcached kbcommit %commit kbactive kbinact kbdirty
01/11/2024 9869583 517833049 98.13 977 285023790 319073740 58.60 340613912 162678784 614843
01/12/2024 4181004 523521628 99.21 1349 287757937 323767076 59.46 346046454 162168337 1115633
01/13/2024 2567787 525134845 99.51 844 285755715 327744180 60.19 352144911 157031086 654493
01/14/2024 2827695 524874937 99.46 844 285135562 328070493 60.25 352003644 156742082 742178
01/15/2024 3482087 524220545 99.34 1838 280133083 332837943 61.13 353676271 153986907 998373
01/16/2024 2152990 525549642 99.59 839 273578756 342252974 62.86 362157756 147013751 1136099
01/17/2024 4575639 523126993 99.13 2418 271393967 340334778 62.51 355987093 150884756 1033531
01/18/2024 2205445 525497187 99.58 2413 282078831 328216144 60.28 353148916 156770066 625021
01/19/2024 9451354 518251278 98.21 1542 293648210 305176716 56.05 352495156 150264497 680464
Na web posso ver que não é normal ter alto uso de swap. Também notei que após uma reinicialização, a troca fica muito baixa durante vários dias. Quando um processo consome toda a RAM (erro da nossa parte), o uso de swap aumenta para 100% e nunca diminui, mesmo que o processo correspondente seja eliminado. É por isso que os servidores que ficam ligados há semanas têm 100% de swap usado.
Disseram-me para monitorar o uso de swap usando sar (pswpin/s pswpout/s).
Quando o uso de swap é 100%, não posso ter problemas, mas quando os processos começam a ser eliminados devido a problemas de RAM, posso ver valores altos para pswpin/s pswpout/s (sar -W).
Durante uma semana posso monitorar essa atividade para verificar se tive problemas de RAM ou não.
Meu problema é o seguinte: Como posso evitar que o problema de RAM ocorra? O que posso usar para verificar a% de RAM usada (enquanto é sempre 99% no SAR...)? Como obter o valor real como no sistema operacional Windows? Para ter certeza de encerrar o processo que começa a ocupar toda a RAM.
Gostaria de gerar um aviso quando o uso de RAM for de 80%.
Eu sei que free -h poderia ser usado, mas não sei como interpretar isso. o mesmo para "topo".
Por exemplo, comparo a saída sar com free -h e saída superior e não vejo valores correspondentes ... :-(
[XXXXX@YYYYYY ~]$ sar -r
Linux 3.10.0-1062.4.1.el7.x86_64 (XXXXXX) 02/02/2024 _x86_64_ (64 CPU)
10:30:01 AM kbmemfree kbmemused %memused kbbuffers kbcached kbcommit %commit kbactive kbinact kbdirty
11:55:01 AM 7916396 519786232 98.50 4688 436720908 164442944 30.20 256757744 249531760 1548
12:00:01 PM 1106680 526595948 99.79 4688 436883120 173459020 31.86 263356476 249699552 4184
12:05:01 PM 742056 526960572 99.86 4688 436447380 173668428 31.90 264216776 249402376 5380
12:10:01 PM 11076780 516625848 97.90 4688 434763392 162944064 29.93 255501116 247835888 3732
12:15:01 PM 7891084 519811544 98.50 4688 434921220 165981024 30.48 258656448 247885164 600
Average: 2201518 525501110 99.58 5447 448667788 154099963 28.30 257069976 255388912 3431
[XXXXX@YYYYYY ~]$ free -h
total used free shared buff/cache available
Mem: 503G 81G 4.3G 1.3G 417G 419G
Swap: 15G 11G 4.4G
[XXXXX@YYYYYY ~]$ top
top - 12:22:09 up 9 days, 18:55, 48 users, load average: 4.21, 4.69, 5.06
Tasks: 2645 total, 5 running, 2488 sleeping, 0 stopped, 152 zombie
%Cpu(s): 6.8 us, 3.4 sy, 0.0 ni, 89.8 id, 0.1 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 52770262+total, 6888876 free, 83310656 used, 43750310+buff/cache
KiB Swap: 16777212 total, 4582892 free, 12194320 used. 44195168+avail Mem
Não sei quais valores verificar top ou free -h para saber a% real de uso de consumo de RAM.
Muito obrigado por ajudar
Seu sistema não parece ter nenhum problema relacionado à troca. No entanto, ao mencionar o alto uso de swap e processos eliminados, você pode ter problemas ocasionais de pouca memória.
Por padrão, espera-se que alguma troca seja usada mesmo em sistemas com bastante memória livre, já que o kernel troca proativamente a memória inativa para ter mais espaço para buffer/cache. Você tem mais de 500 GB de RAM e uma partição swap de 16 GB, então é normal preenchê-la com dados inativos.
Se a troca estiver causando problemas de desempenho, você poderá limitar ou desabilitar seu uso com o seguinte:
sysctl vm.swappiness=0
significa que o sistema não deve usar nenhuma troca, a menos que a memória livre esteja perigosamente muito baixa. Para persistir durante a reinicialização, você precisa colocarvm.swappiness=0
no/etc/sysctl.conf
arquivo;swapoff -a
desabilitar à força qualquer troca. Observe que se você realmente precisar de alguma troca (ou seja: para absorver um pico de consumo de memória), seu sistema poderá encerrar algum processo por meio do OOM-killer. Para persistir durante a reinicialização, você precisa remover a entrada de troca do/etc/fstab
arquivo;desabilite a troca de disco e use
zram
para criar um dispositivo compactado na RAM.zram
pode ser muito útil, mas eu não usaria essa solução a menos que fosse realmente necessária e aplicável à sua carga de trabalho.Mais algumas informações:
Quando existe um processo trocado, a troca deve ser liberada. Se a troca for preenchida constantemente, provavelmente significa que outro processo não trocado foi eliminado, em vez do processo trocado. Você pode usar
dmesg
para verificar o kernel OOM.Isso significa que o kernel está tentando (sem sucesso) liberar alguma memória para evitar OOM.
sar
não tem capacidade de alerta, até onde eu sei. Você precisa analisarfree
a saída e/ou usar uma ferramenta de monitoramento de rede comozabbix
,netdata
, etc.Bem, você realmente deveria ler as páginas de manual relevantes. Resumindo, você pode verificar as colunas
used
ouavailable
relatadas porfree
.Eu sugeriria instalar em cima
https://www.redhat.com/sysadmin/analyzing-linux-server-performance-atop
Isso cria instantâneos de desempenho em um intervalo predefinido, para que você possa ver o que leva ao consumo de memória.
Editar em relação à pergunta de acompanhamento para rede
O kernel Linux não mantém contadores para o número de acessos à rede emitidos por processo ou por thread. Como consequência, não é possível analisar qual processo e/ou thread causa maior carga caso o top apresente uma alta utilização em uma de suas interfaces de rede. O módulo opcional do kernel netatop pode ser carregado para coletar estatísticas sobre os pacotes TCP e UDP que foram transmitidos/recebidos por processo e por thread. Assim que o top descobre que este módulo está ativo, ele mostra as colunas SNET e RNET na tela genérica para a quantidade de pacotes transmitidos e recebidos por processo. Quando a tecla 'n' é pressionada, mostra contadores detalhados sobre o número de pacotes transmitidos/recebidos via TCP e UDP, os tamanhos médios desses pacotes e a largura de banda total consumida para entrada e saída por processo/thread. https://www.atoptool.nl/netatop.php
Isso é principalmente um comentário.
Hum, não. Espero que esta história tenha perdido parte de seu significado original ao ser recontada. Além de alguns casos extremos muito raros, usar ativamente o swap em um host que atua como servidor é RUIM.
O que também é muito peculiar é que o espaço de troca é dimensionado em cerca de 3% da RAM. Estou lutando para imaginar por que isso faria sentido.
Também fico me perguntando qual é o seu papel nesta história, se você não é o administrador do sistema.
Isso NÃO deve acontecer em um host de servidor configurado/gerenciado corretamente.
Além disso, as ferramentas que você está tentando usar para esta tarefa são úteis para diagnóstico, mas ruins para monitoramento. Existem muitas ferramentas excelentes disponíveis, muitas delas como software livre, para monitoramento; Zabbix, Nagios, Icinga, LibreNMS, Check_MK, para citar apenas alguns. Não tente escrever o seu próprio, a menos que você tenha 1) um bom conhecimento de administração de sistema 2) um bom motivo para não usar uma ferramenta disponível.
A utilização da memória do Linux pode ser confusa e a saída de diferentes ferramentas difícil de interpretar. Você pode ler algo como https://www.linuxatemyram.com/ como material introdutório primeiro.
A saída de
top
efree
mostra que seu sistema subutiliza a RAM - apenas 81 GB são usados após 9 dias de atividade e todo o resto são buffers e cache que podem ser descartados se o sistema precisar de mais memória para programas. Mas setop
efree
forem executados logo após um programa grande ter sido eliminado pelo OOM e a memória ter sido liberada, essas métricas serão irrelevantes.A primeira
sar
saída mostra mais memória comprometida (~60%) e mais memória ativa (360GB) versus a segunda (~30% e 260 GB respectivamente). Esses valores estão longe da situação de falta de memória e processos eliminados. O primeirosar
mostra medições durante vários dias sem qualquer alteração significativa, portanto, não há vazamentos lentos de memória.O uso de swap no seu caso é insignificante (16 GB de 512 GB) e tem pouco efeito. Seu sistema pode funcionar muito bem com 100% de uso de swap, desde que você tenha memória suficiente na
available
coluna de entradatop
oufree
saída. Você pode aumentar o tamanho do swap para manter sua utilização abaixo de 100%, melhorando o desempenho do sistema liberando a RAM real. Fique de olho nasvmstat
métricas de swap-in (si) e swap-out (so) - elas devem estar próximas de zero na maior parte do tempo. Tenha em mente que a porcentagem de uso de swap é um efeito de segunda ordem do consumo de memória causado por um processo descontrolado.Considerando todos os detalhes disponíveis e a ausência de vazamentos lentos de memória, eu suspeito que às vezes você tem um processo descontrolado que consome toda a memória rapidamente, forçando o uso de swap para 100% e então esse processo é eliminado pelo OOM. Você precisa verificar se há mensagens OOM em seus logs; eles devem conter informações sobre o processo encerrado e seu consumo de memória. Depois de identificar o processo descontrolado, você pode definir seus limites de memória em sua unidade systemd para que ele seja eliminado antes de consumir todos os recursos do sistema.
Você também pode inspecionar a utilização da memória pelos processos individuais a qualquer momento, executando
top -o RES
o que classificaria os processos pelo consumo de memória residente.Você pode instalar algo simples como monit para monitorar o consumo de memória/swap do sistema e o consumo de memória por processo para processos selecionados.