Я недавно перенес старый сервер с MySQL на новый VPS с MariaDB 5.5. У меня не слишком много работы на сервере (всего несколько сайтов PHP), и свободная память вроде бы в порядке, но БД продолжает падать - иногда каждые несколько дней, а иногда в течение нескольких часов.
Я получаю следующие ошибки в журналах:
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
Я играл с настройками my.cnf для InnoDB Heap, которая, кажется, не помогает. Вот соответствующая часть:
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
Кажется, у меня «много» свободной оперативной памяти, и у меня также есть своп:
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
Как я могу решить / устранить эту проблему? Я искал интервеб для подсказок, но ничего не помогло.
[ERROR] mysqld: Out of memory
уверен , что выглядит как сильный намек. Вы проверили системные журналы, чтобы убедиться, что ядро (OOM) решило убить mysql?top
команды каждый интервал), чтобы знать, что может вызвать сбой. Какие-либо другие сервисы работают на ваших серверах, как mysql (mariadb)?Ответы:
Я надеюсь, что это будет полезно для вас.
пытаться
performance_schema = off
в
[mysqld]
разделе вашей конфигурации.https://mariadb.com/resources/blog/starting-mysql-on-low-memory-virtual-machines/
источник