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 / dba / Perguntas / 192364
Accepted
Simone Bronzini
Simone Bronzini
Asked: 2017-12-05 10:08:44 +0800 CST2017-12-05 10:08:44 +0800 CST 2017-12-05 10:08:44 +0800 CST

MongoDB termina quando fica sem memória

  • 772

Tenho a seguinte configuração:

  • uma máquina host que executa três contêineres docker:
    • MongoDB
    • Redis
    • Um programa usando os dois contêineres anteriores para armazenar dados

Tanto o Redis quanto o MongoDB são usados ​​para armazenar grandes quantidades de dados. Eu sei que o Redis precisa manter todos os seus dados na RAM e estou bem com isso. Infelizmente, o que acontece é que o mongo começa a ocupar muita RAM e assim que a RAM do host está cheia (estamos falando de 32 GB aqui), o mongo ou o Redis travam.

Eu li as seguintes perguntas anteriores sobre isso:

  1. Limite o uso de RAM do MongoDB : aparentemente a maior parte da RAM é usada pelo cache do WiredTiger
  2. Limite de memória do MongoDB : aqui aparentemente o problema eram os dados de log
  3. Limite o uso de memória RAM no MongoDB : aqui eles sugerem limitar a memória do mongo para que ele use uma quantidade menor de memória para seu cache/logs/dados
  4. MongoDB usando muita memória : aqui eles dizem que é o sistema de cache WiredTiger que tende a usar o máximo de RAM possível para fornecer acesso mais rápido. Eles também afirmamit's completely okay to limit the WiredTiger cache size, since it handles I/O operations pretty efficiently
  5. Existe alguma opção para limitar o uso de memória do mongodb? : cache novamente, eles também adicionamMongoDB uses the LRU (Least Recently Used) cache algorithm to determine which "pages" to release, you will find some more information in these two questions
  6. Relação de índice/RAM do MongoDB : citação:MongoDB keeps what it can of the indexes in RAM. They'll be swaped out on an LRU basis. You'll often see documentation that suggests you should keep your "working set" in memory: if the portions of index you're actually accessing fit in memory, you'll be fine.
  7. como liberar o cache que é usado pelo MongoDB? : mesma resposta que em 5.

Agora, o que parece entender de todas essas respostas é que:

  1. Para um acesso mais rápido, seria melhor que o mongo ajustasse todos os índices na RAM. No entanto, no meu caso, estou bem com índices residindo parcialmente no disco, pois tenho um SSD bastante rápido.
  2. A RAM é usada principalmente para armazenamento em cache pelo mongo.

Considerando isso, eu esperava que o mongo tentasse usar o máximo de espaço de RAM possível, mas sendo capaz de funcionar também com pouco espaço de RAM e buscar a maioria das coisas do disco. No entanto, limitei a memória do contêiner do Mongo Docker (a 8 GB, por exemplo), usando --memorye --memory-swap, mas em vez de buscar coisas do disco, o mongo simplesmente travou assim que ficou sem memória.

Como posso forçar o mongo a usar apenas a memória disponível e buscar do disco tudo o que não cabe na memória?

mongodb memory
  • 2 2 respostas
  • 20838 Views

2 respostas

  • Voted
  1. Best Answer
    Md Haidar Ali Khan
    2017-12-05T22:17:33+08:002017-12-05T22:17:33+08:00

    Conforme MongoDB BOL Aqui Alterado na versão 3.4: Os valores podem variar de 256MBa 10TBe podem ser um float. Além disso, o valor padrão também mudou.

    A partir de 3.4, o cache interno do WiredTiger , por padrão, usará o maior de:

    50% of RAM minus 1 GB, or
    256 MB.
    

    Com WiredTigero , o MongoDB utiliza o WiredTiger internal cache e o filesystem cache.

    Por meio do filesystem cache, o MongoDB usa automaticamente toda a memória livre que não é usada pelo WiredTiger cacheou por outros processos.

    O storage.wiredTiger.engineConfig.cacheSizeGB limita o tamanho do WiredTigercache interno. O sistema operacional usará a memória livre disponível para o cache do sistema de arquivos, o que permite que os arquivos de dados compactados do MongoDB permaneçam na memória. Além disso, operating systemusará qualquer RAM livre para armazenar em buffer os blocos do sistema de arquivos e o cache do sistema de arquivos.

    Para acomodar os consumidores adicionais de RAM , talvez seja necessário diminuir WiredTigero tamanho do cache interno.

    Para mais informações sobre o mecanismo de armazenamento do WiredTiger e as opções do arquivo de configuração

    • 12
  2. JJussi
    2017-12-05T20:34:58+08:002017-12-05T20:34:58+08:00

    Na verdade, se você olhar de perto, não é o mongod que morre por "falta de memória", é o gerenciador OOM do kernel (sem memória) que mata o mongod, porque tem o maior uso de memória.

    Sim, você pode tentar resolver o problema com o parâmetro de configuração do monngodb cacheSizeGB , mas no ambiente de contêiner, é melhor usar cgroups para limitar os recursos que qualquer um dos três contêineres obtém.

    • 7

relate perguntas

  • A fragmentação é eficaz para coleções pequenas?

  • Não há "Usando páginas bloqueadas para buffer pool" no log do SQL Server

  • Estou usando o mecanismo de armazenamento MEMORY, mas o MySQL ainda grava em meu disco... Por quê?

  • PostgreSQL: Força dados na memória

  • Bons recursos para operar/administrar o MongoDB

Sidebar

Stats

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

    conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host

    • 12 respostas
  • Marko Smith

    Como fazer a saída do sqlplus aparecer em uma linha?

    • 3 respostas
  • Marko Smith

    Selecione qual tem data máxima ou data mais recente

    • 3 respostas
  • Marko Smith

    Como faço para listar todos os esquemas no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 respostas
  • Marko Smith

    Como usar o sqlplus para se conectar a um banco de dados Oracle localizado em outro host sem modificar meu próprio tnsnames.ora

    • 4 respostas
  • Marko Smith

    Como você mysqldump tabela (s) específica (s)?

    • 4 respostas
  • Marko Smith

    Listar os privilégios do banco de dados usando o psql

    • 10 respostas
  • Marko Smith

    Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Como faço para listar todos os bancos de dados e tabelas usando o psql?

    • 7 respostas
  • Martin Hope
    Jin conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane Como faço para listar todos os esquemas no PostgreSQL? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh Por que o log de transações continua crescendo ou fica sem espaço? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland Listar todas as colunas de uma tabela especificada 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney O MySQL pode realizar consultas razoavelmente em bilhões de linhas? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx Como posso monitorar o andamento de uma importação de um arquivo .sql grande? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas Como posso cronometrar consultas SQL usando psql? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas Como faço para listar todos os bancos de dados e tabelas usando o psql? 2011-02-18 00:45:49 +0800 CST

Hot tag

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

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