Uso, gestión y requisitos de memoria de MongoDB

Uso, gestión y requisitos de memoria de MongoDB

  • ITOps y DevOps
6 min de lectura Actualizado Feb 27, 2019

Puntos clave: La gestión de memoria de MongoDB está crucial para prevenir caídas de servidor por sobrecarga de datos. Ofrece estrategias para monitorizar el uso de memoria y directrices para escalar añadiendo nodos cuando sea necesario.

  • MongoDB utiliza caché para una recuperación rápida de datos, no como base de datos en memoria.
  • Los servicios gratuitos de monitorización ayudan a controlar el uso de memoria y el rendimiento del servidor.

Si te pones demasiados datos en tu base de datos de MongoDB, el servidor se quedará sin memoria.  Puede hacerlo tan rápido que te ni siquiera podrá cerrar el proceso de la base de datos Mongo porque el shell bash ya no responde. La solución a esto están añadir otro nodo a tu clúster. Ilustramos cómo es un servidor cuando se queda sin memoria añadiendo intencionadamente más datos a una máquina de 8 GB de los que puede soportar y luego ejecutando consultas sobre ella.   Luego mostramos cómo son los registros y qué herramientas te utiliza para supervisa esta situación. Con 215 MB de datos, este servidor consumía consistentemente el 11% de la memoria al acceder con múltiples búsquedas.  Luego añadimos 3,5 GB de datos, momento en el que se bloqueaba al alcanzar el 92% de uso de memoria.

Cuando MongoDB se quede sin memoria, añade otro nodo

MongoDB no están una base de datos en memoria.  Aunque puede configurarse para ejecutarse así.  Pero genera un utiliza generoso de caché, es decir, los registros de datos se mantienen en memoria para una recuperación rápida, en lugar de en disco. están Hay mucha información mala en StackOverflow sobre qué hacer cuando tu servidor se queda sin memoria.  En resumen, el proceso de Mongod consumirá cada vez más memoria a medida que llena su caché.  Así que la gente ha razonado que si tu ordenador se están quedando sin memoria, te debería limitar la memoria disponible para MongoDB.  Pero no están tal configuración. MongoDB, en su configuración predeterminada, utiliza utiliza el tamaño de caché de 256 MB o 1/2 de (RAM) para su tamaño de caché. te puede limitar el tamaño de la caché de MongoDB añadiendo el argumento cacheSizeGB al archivo de configuración /etc/mongod.conf, como se muestra más abajo.  Pero MongoDB usa tanto su caché interna como la caché del sistema de archivos.  Así que limitarlo en un lugar reducirá Haz consumirá más en el otro.  Así que eso no es una solución.

    storage:
  dbPath: /var/lib/mongodb
  journal:
    enabled: true
  wiredTiger:
      engineConfig:
         cacheSizeGB: 1

Servicio de monitorización gratuito de MongoDB

te debería aprovechar el servicio gratuito de monitorización que ofrece MongoDB. Está alojado en su web, pero eso no significa que te necesites utiliza su servicio en la nube (Atlas). Funciona con tus propios servidores. Para utiliza eso, abre el shell de Mongo y luego pega este comando:

    db.enableFreeMonitoring()

Parte de su página web se ve así.  te Ve que en este equipo de 8GB está agotado. Esto hará que MongoDB envíe estadísticas de uso a su web, donde rastrearán ese estado y lo alojarán en una página web por ti.  teTe dan una URL para rastrear tu sitio.  Esa es una URL persistente porque asignan un ID único a tu instalación.

Mostrar Uso de MongoDB de Mostrar Memoria

Estas métricas incluyen el uso de la CPU, etc.  Arriba muestro solo la sección de memoria. Eso están:

  • residente—cantidad de memoria física (RAM) real utilizada por un proceso.
  • virtual—RAM más memoria que se ha extendido a la caché del sistema de archivos, es decir, memoria virtual.
  • mapped—MongoDB desde la versión 3.2 ya no realiza mapeo de memoria de archivos. Eso lo usaba el anterior módulo de gestión de memoria llamado MMAPv1. Ahora usa WiredTiger por defecto.

Para comprobar la caché de tu sistema de archivos, ejecuta free -k para mostrar la memoria virtual disponible en kilobytes.  A continuación están cómo se veía mi servidor en intervalos de 5 minutos cuando dejaba la máquina sin memoria.   La columna a tener en cuenta está disponible.  Divide el número mostrado entre 1024*1024 para convertir este número a gigabytes.

    free -k


             total        used        free      shared  buff/cache   available
Mem:        8173744     1088440     6753392        9052      331912     6816176
Swap:             0           0           0
              total        used        free      shared  buff/cache   available
Mem:        8173744     4654600     2663432        9080      855712     3249520
Swap:             0           0           0
              total        used        free      shared  buff/cache   available
Mem:        8173744     7992568      119508        9052       61668       45682

Por supuesto, te también pueden utiliza top -p (pid mongod) a supervisa memoria.  VIRT y RES son memoria virtual y residente.  Por debajo de te Ve ese mongod están usando el 91% de la memoria del sistema en este ejemplo.  En ese momento el sistema dejó de responder.

Tú también puedes Obtén estadísticas de uso de memoria de MongoDB en el shell:

    db.serverStatus().mem
{
	"bits" : 64,
	"resident" : 907,
	"virtual" : 1897,
	"supported" : true,
	"mapped" : 0,
	"mappedWithJournal" : 0
}

Si te has programado en C o C++te estarás familiarizado con malloc.  Eso están la función del sistema te llamar cuando te necesites reservar memoria para tu máquina.  Cuando MongoDB ya no puede hacer eso, estas advertencias Comienza apareciendo en /var/log/mongodb/mongod.log:

    2019-02-19T03:44:18.738+0000 I COMMAND  [ftdc] serverStatus was very slow: { after basic: 202, after asserts: 686, after backgroundFlushing: 890, after connections: 1399, after dur: 1717, after extra_info: 2039, after freeMonitoring: 3003, after globalLock: 3389, after locks: 4073, after logicalSessionRecordCache: 4782, after network: 5520, after opLatencies: 6068, after opcounters: 6477, after opcountersRepl: 6818, after repl: 7441, after security: 7799, after storageEngine: 8616, after tcmalloc: 9676, after transactions: 10081, after transportSecurity: 10412, after wiredTiger: 22733, at end: 24170 }

Hasta que finalmente dice:

    2019-02-19T03:45:17.456+0000 F -        [free_mon] out of memory.

te También puedes iniciar sesión en Mongo y repetir los dos comandos que aparecen a continuación (te necesitas ejecutar ambos para actualizar la salida) para ver cómo tu consumo de memoria aumenta a medida que el servidor va cuesta abajo.

    var mem = db.serverStatus().tcmalloc;

mem.tcmalloc.formattedString

Aquí está la salida.  Como te ves, ha agotado toda la memoria disponible en esta máquina de 8GB. También puedes iniciar sesión en Mongo y repetir los dos comandos que aparecen a continuación (tú necesitas ejecutar ambos para actualizar la salida) para ver cómo tu consumo de memoria aumenta a medida que tu servidor va cuesta abajo.

    ------------------------------------------------
MALLOC:       73048776 (   69.7 MiB) Bytes in use by application
MALLOC: +      3792896 (    3.6 MiB) Bytes in page heap freelist
MALLOC: +       508776 (    0.5 MiB) Bytes in central cache freelist
MALLOC: +       978848 (    0.9 MiB) Bytes in transfer cache freelist
MALLOC: +      1399344 (    1.3 MiB) Bytes in thread cache freelists
MALLOC: +      1335552 (    1.3 MiB) Bytes in malloc metadata
MALLOC:   ------------
MALLOC: =     81064192 (   77.3 MiB) Actual memory used (physical + swap)
MALLOC: +            0 (    0.0 MiB) Bytes released to OS (aka unmapped)
MALLOC:   ------------
MALLOC: =     81064192 (   77.3 MiB) Virtual address space used
MALLOC:
MALLOC:            816              Spans in use
MALLOC:             21              Thread heaps in use
MALLOC:           4096              Tcmalloc page size
------------------------------------------------

Guía de MongoDB

  1. Resumen de MongoDB: Empezando con MongoDB
  2. Cómo instalar MongoDB en Ubuntu y Mac
  3. Creación de una base de datos en MongoDB
  4. Comandos básicos de MongoDB Shell
  5. MongoDB Compass: Uso de la interfaz gráfica de Mongo
  6. Explicación del Control de Acceso Basado en Roles (RBAC) de MongoDB
  7. Explicación de los operadores de proyección y proyección de MongoDB
  8. Explicación de las funciones agregadas de MongoDB
  9. Ordenación de MongoDB: método y ejemplos de sort()
  10. Uso de operadores de Push & Pull en MongoDB
  11. Cómo utiliza MongoDB $unwind
  12. 23 operadores comunes de consultas de MongoDB y cómo utilizarlos
  13. Ejemplos de consultas de geolocalización de MongoDB
  14. Introducción a las transacciones de MongoDB
  15. Índices de MongoDB: Principales tipos de índices y cómo gestionarlos
  16. Mejores comandos de MongoDB te necesitas saber
  17. Replicación de MongoDB: Una introducción completa
  18. Cómo configurar un clúster de MongoDB
  19. Fragmentos de MongoDB: Conceptos, Ejemplos y Tutoriales
  20. MongoDB Atlas: Configuración y uso de MongoDB gestionado
  21. Cómo ejecutar MongoDB como contenedor Docker
  22. Uso, gestión y requisitos de memoria de MongoDB
  23. Cómo utilizar Mongodump para copias de seguridad de MongoDB
  24. Ejemplos de Mongorestore para restaurar copias de seguridad de MongoDB
  25. Cómo utilizar PyMongo
  26. Cómo utilizar Mongoose para MongoDB y NodeJS
  27. Chuletas de MongoDB
  28. MongoDB vs Cassandra: Comparación de bases de datos NoSQL
  29. PostgreSQL vs MongoDB: Comparando bases de datos
  30. MySQL vs MongoDB: Comparando bases de datos
  31. Certificaciones MongoDB: Una introducción

Estas publicaciones son mías y no representan necesariamente la posición, estrategias u opinión de BMC.

Más de ITOps y DevOps

Suscríbete al Informe

Al registrarse para esta oferta te son confirmar que te leído y aceptado la Política de Privacidad de BMC.

Gracias te

Tú te has suscrito a The Brief
El Brief abarca la orquestación de mainframe y empresa—BMC AMI y Control-M—y la investigación de analistas, despliegues de clientes y eventos en ambas áreas.