Recientemente migré un antiguo servidor que ejecuta MySQL a un nuevo VPS que ejecuta MariaDB 5.5. No tengo demasiado en ejecución en el servidor (solo unos pocos sitios PHP) y la memoria libre parece estar bien, pero la base de datos sigue fallando, a veces cada pocos días, otras veces en unas pocas horas.
Recibo los siguientes errores en los registros:
131231 1:43:04 [ERROR] mysqld: Out of memory (Needed 128917504 bytes)
131231 1:43:04 [ERROR] mysqld: Out of memory (Needed 96681984 bytes)
131231 1:43:04 [ERROR] mysqld: Out of memory (Needed 72499200 bytes)
131231 1:43:04 [ERROR] mysqld: Out of memory (Needed 54362112 bytes)
131231 1:43:04 InnoDB: The InnoDB memory heap is disabled
131231 1:43:04 InnoDB: Mutexes and rw_locks use GCC atomic builtins
131231 1:43:04 InnoDB: Compressed tables use zlib 1.2.3.4
131231 1:43:04 InnoDB: Using Linux native AIO
131231 1:43:04 InnoDB: Initializing buffer pool, size = 128.0M
InnoDB: mmap(137756672 bytes) failed; errno 12
131231 1:43:04 InnoDB: Completed initialization of buffer pool
131231 1:43:04 InnoDB: Fatal error: cannot allocate memory for the buffer pool
131231 1:43:04 [ERROR] Plugin 'InnoDB' init function returned error.
131231 1:43:04 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
131231 1:43:04 [Note] Plugin 'FEEDBACK' is disabled.
131231 1:43:04 [ERROR] Unknown/unsupported storage engine: InnoDB
131231 1:43:04 [ERROR] Aborting
131231 1:43:04 [Note] /usr/sbin/mysqld: Shutdown complete
He jugado con la configuración de my.cnf para InnoDB Heap, que no parece ayudar. Aquí está la porción relevante:
innodb_buffer_pool_size = 128M
innodb_log_buffer_size = 8M
innodb_file_per_table = 1
innodb_open_files = 400
innodb_io_capacity = 400
innodb_flush_method = O_DIRECT
Parece que tengo "un montón" de RAM libre, y también tengo algunos intercambios disponibles:
root@phoenix:~# free -m
total used free shared buffers cached
Mem: 994 923 71 0 19 417
-/+ buffers/cache: 486 508
Swap: 1023 131 892
¿Cómo puedo resolver / solucionar este problema? He buscado pistas en el interwebz, pero nada me ha ayudado.
[ERROR] mysqld: Out of memory
seguro parece una pista fuerte. ¿Revisó los registros de su sistema para ver si el núcleo (OOM) decidió matar mysql?top
comando en cada intervalo) para saber qué podría causar el bloqueo. ¿Algún otro servicio se ejecuta en sus servidores como mysql (mariadb)?Respuestas:
Espero que te sea útil.
tratar
performance_schema = off
en la
[mysqld]
sección de su configuración.https://mariadb.com/resources/blog/starting-mysql-on-low-memory-virtual-machines/
fuente