AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / server / Perguntas / 1122369
Accepted
MikeKulls
MikeKulls
Asked: 2023-02-09 17:32:03 +0800 CST2023-02-09 17:32:03 +0800 CST 2023-02-09 17:32:03 +0800 CST

Redhat phantom sem problemas de memória

  • 772

Temos um servidor que executa vários aplicativos headless, como Java. Ele processa para transmitir dados, scripts python diários, etc. De tempos em tempos, alguns de nossos aplicativos ficam out of memory errors.

O problema que temos é que o monitoramento mostra que há muita memória RAM. Aumentamos de 128 GB para 192 GB e não resolveu o problema. Nosso monitoramento faz uma leitura a cada 20 segundos e mostra a memória mínima disponível de 132 GB nos últimos 2 dias. Mas alguns aplicativos falharam com erros de falta de memória esta manhã. É possível obter OOM com bastante RAM disponível?

EDIT: Resposta às perguntas de David

  • sim, os 192 GB são apenas a memória RAM alocada para o sistema operacional. É uma VM
  • O monitoramento lerá ram livre/disponível para o sistema operacional, não temos nenhum monitoramento por processo
  • A maioria dos processos java não especifica requisitos de memória na CLI (por exemplo, Xmx, etc.)
  • A exceção é "Exceção no encadeamento "principal" java.lang.OutOfMemoryError: impossível criar novo encadeamento nativo"

Eu acrescentaria que vários processos falham ao mesmo tempo. Para mim, isso indicaria que não é um problema com o processo em si, mas algo a ver com o sistema. Alguns dos aplicativos que falham fazem a mesma coisa o dia todo, todos os dias, que é processar um fluxo de dados bastante consistente. Não é como se eles pudessem ser inundados com um grande número de solicitações.

centos
  • 2 2 respostas
  • 463 Views

2 respostas

  • Voted
  1. Best Answer
    David Ogren
    2023-02-09T19:54:10+08:002023-02-09T19:54:10+08:00

    Quando você diz "aumentamos de 128 GB para 192 GB e não resolveu o problema", o que você quer dizer? O espaço de heap da JVM? A VM do RHEL? Além disso, o que você quer dizer com "nosso monitoramento faz uma leitura?" Seu monitoramento está olhando para a memória heap Java ou para a memória do sistema?

    É possível obter OOM com bastante RAM disponível?

    Claro. A causa mais comum é que "muita RAM está disponível", mas não do tipo certo. por exemplo, você tem RAM no servidor, mas o processo Java não está configurado para usá-lo. Ou você tem RAM disponível no heap Java, mas o aplicativo Java precisa de memória de pilha em vez de memória de heap. Ou perm memória. Ou fora da memória heap.

    Existem alguns outros casos extremos em que você pode obter um erro OOM mesmo com o acima, mas esses são muito raros. O mais provável é que você esteja adicionando o tipo errado de memória.

    Se eu fosse depurar, meus primeiros passos seriam:

    • O que exatamente é o erro OOM e onde você o está vendo?
    • Observando os sinalizadores de inicialização da JVM (e potencialmente a configuração do aplicativo, dependendo do tipo de aplicativo).
    • Ativando o registro do GC no aplicativo.

    EDITAR EM RESPOSTA AO STACK TRACE:

    Bem, parece que meu comentário "há alguns outros casos extremos" foi profético. Concordo com o comentário de Philipp Wendler de que esta é uma duplicata de https://stackoverflow.com/q/16789288/396730 . Na verdade, você não está ficando sem memória, está ficando sem threads.

    Você pode procurar aqui: https://access.redhat.com/solutions/1420363 para saber como aumentar o número de threads (versão curta: atualização /proc/sys/kernel/threads-max). Mas, como é discutido na postagem Stack Overflow vinculada, você provavelmente precisará corrigir seu aplicativo em vez de apenas aumentar o limite. Qualquer aplicativo que use mais do que o número máximo padrão de encadeamentos provavelmente está vazando encadeamentos. (E se não estiverem, é definitivamente um desperdício de tópicos.) Especialmente se você disser que eles não estão sendo inundados com solicitações.

    • 6
  2. MikeKulls
    2023-02-16T16:44:00+08:002023-02-16T16:44:00+08:00

    Pensei em adicionar alguns dos comandos que usei para investigar o problema. Eu os adicionei ao cron para executar a cada minuto.

    #log total count of threads to a file
    echo $(date +"%Y-%m-%d %H:%M"; ps -eLf | wc -l) >> /somepath/threadcount_`date '+%Y-%m-%d'`.log
    
    #log the processes using the most threads
    ps -eLf | awk '{print $2}' | grep -v PID | uniq -c | sort -nr | head -10 | awk '{print $2,$1}' > /somepath/threadhogs_`date '+%Y-%m-%d_%H-%M-%S'`.log
    
    #send output of top to a file, sorted by memory usage
    top -b -n 1 -o RES > /somepath/top_`date '+%Y-%m-%d_%H-%M-%S'`.log
    
    • 0

relate perguntas

  • Como descobrir detalhes sobre hardware na máquina Linux?

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Você pode passar usuário/passar para autenticação básica HTTP em parâmetros de URL?

    • 5 respostas
  • Marko Smith

    Ping uma porta específica

    • 18 respostas
  • Marko Smith

    Verifique se a porta está aberta ou fechada em um servidor Linux?

    • 7 respostas
  • Marko Smith

    Como automatizar o login SSH com senha?

    • 10 respostas
  • Marko Smith

    Como posso dizer ao Git para Windows onde encontrar minha chave RSA privada?

    • 30 respostas
  • Marko Smith

    Qual é o nome de usuário/senha de superusuário padrão para postgres após uma nova instalação?

    • 5 respostas
  • Marko Smith

    Qual porta o SFTP usa?

    • 6 respostas
  • Marko Smith

    Linha de comando para listar usuários em um grupo do Windows Active Directory?

    • 9 respostas
  • Marko Smith

    O que é um arquivo Pem e como ele difere de outros formatos de arquivo de chave gerada pelo OpenSSL?

    • 3 respostas
  • Marko Smith

    Como determinar se uma variável bash está vazia?

    • 15 respostas
  • Martin Hope
    Davie Ping uma porta específica 2009-10-09 01:57:50 +0800 CST
  • Martin Hope
    kernel O scp pode copiar diretórios recursivamente? 2011-04-29 20:24:45 +0800 CST
  • Martin Hope
    Robert ssh retorna "Proprietário incorreto ou permissões em ~/.ssh/config" 2011-03-30 10:15:48 +0800 CST
  • Martin Hope
    Eonil Como automatizar o login SSH com senha? 2011-03-02 03:07:12 +0800 CST
  • Martin Hope
    gunwin Como lidar com um servidor comprometido? 2011-01-03 13:31:27 +0800 CST
  • Martin Hope
    Tom Feiner Como posso classificar a saída du -h por tamanho 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich O que é um arquivo Pem e como ele difere de outros formatos de arquivo de chave gerada pelo OpenSSL? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent Como determinar se uma variável bash está vazia? 2009-05-13 09:54:48 +0800 CST

Hot tag

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve