Di recente ho migrato un vecchio server che esegue MySQL su un nuovo VPS che esegue MariaDB 5.5. Non ho troppe funzioni sul server (solo alcuni siti PHP) e la memoria libera sembra essere OK, ma il DB continua a bloccarsi - a volte ogni pochi giorni, altre volte entro poche ore.
Ricevo i seguenti errori nei registri:
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
Ho giocato con le impostazioni my.cnf per InnoDB Heap, che non sembra aiutare. Ecco la parte pertinente:
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
Mi sembra di avere "un sacco" di RAM libera e ho anche degli swap disponibili:
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
Come posso risolvere / risolvere questo problema? Ho cercato interwebz alla ricerca di indizi, ma nulla mi ha aiutato.
top
comando ogni intervallo) per sapere cosa potrebbe causare l'incidente. Qualche altro servizio viene eseguito nei tuoi server come mysql (mariadb)?
[ERROR] mysqld: Out of memory
sicuro sembra un forte suggerimento. Hai controllato i log di sistema per vedere se il kernel (OOM) ha deciso di uccidere mysql?