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
- Resumen de MongoDB: Empezando con MongoDB
- Cómo instalar MongoDB en Ubuntu y Mac
- Creación de una base de datos en MongoDB
- Comandos básicos de MongoDB Shell
- MongoDB Compass: Uso de la interfaz gráfica de Mongo
- Explicación del Control de Acceso Basado en Roles (RBAC) de MongoDB
- Explicación de los operadores de proyección y proyección de MongoDB
- Explicación de las funciones agregadas de MongoDB
- Ordenación de MongoDB: método y ejemplos de sort()
- Uso de operadores de Push & Pull en MongoDB
- Cómo utiliza MongoDB $unwind
- 23 operadores comunes de consultas de MongoDB y cómo utilizarlos
- Ejemplos de consultas de geolocalización de MongoDB
- Introducción a las transacciones de MongoDB
- Índices de MongoDB: Principales tipos de índices y cómo gestionarlos
- Mejores comandos de MongoDB te necesitas saber
- Replicación de MongoDB: Una introducción completa
- Cómo configurar un clúster de MongoDB
- Fragmentos de MongoDB: Conceptos, Ejemplos y Tutoriales
- MongoDB Atlas: Configuración y uso de MongoDB gestionado
- Cómo ejecutar MongoDB como contenedor Docker
- Uso, gestión y requisitos de memoria de MongoDB
- Cómo utilizar Mongodump para copias de seguridad de MongoDB
- Ejemplos de Mongorestore para restaurar copias de seguridad de MongoDB
- Cómo utilizar PyMongo
- Cómo utilizar Mongoose para MongoDB y NodeJS
- Chuletas de MongoDB
- MongoDB vs Cassandra: Comparación de bases de datos NoSQL
- PostgreSQL vs MongoDB: Comparando bases de datos
- MySQL vs MongoDB: Comparando bases de datos
- Certificaciones MongoDB: Una introducción
Estas publicaciones son mías y no representan necesariamente la posición, estrategias u opinión de BMC.