MySQL (MariaDB) często się zawiesza

9

Niedawno przeprowadziłem migrację starego serwera z MySQL do nowego VPS z MariaDB 5.5. Nie mam za dużo na serwerze (tylko kilka stron PHP) i wolna pamięć wydaje się być OK, ale DB ciągle się zawiesza - czasami co kilka dni, a czasem w ciągu kilku godzin.

W dziennikach pojawiają się następujące błędy:

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

Grałem z ustawieniami my.cnf dla InnoDB Heap, co nie wydaje się pomocne. Oto odpowiednia część:

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

Wydaje mi się, że mam „dużo” wolnej pamięci RAM i mam też dostępną wymianę:

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

Jak mogę rozwiązać / rozwiązać ten problem? Przeszukałem interwebz w poszukiwaniu wskazówek, ale nic nie pomogło.

Matt Hamann
źródło
1
Jak wygląda pamięć tuż przed awarią? Z [ERROR] mysqld: Out of memorypewnością wygląda to na mocną wskazówkę. Czy sprawdziłeś logi systemowe, czy jądro (OOM) zdecydowało się zabić mysql?
Zoredache
Powinieneś zarejestrować używane uchwyty plików i pamięć używaną zarówno przed, jak i po awarii (być może nawet zrzut toppolecenia co interwał), aby wiedzieć, co może spowodować awarię. Jakieś inne usługi działają na Twoich serwerach, takie jak mysql (mariadb)?
Ashwin kumar
1
Istnieje naprawdę świetna odpowiedź na temat DBA, która wydaje się być pomocna: dba.stackexchange.com/questions/1927/…
Matt Hamann
Wypróbuj performance_schema = off?

Odpowiedzi:

9

Mam nadzieję, że ci się przyda.

próbować

performance_schema = off

w [mysqld]sekcji twojej konfiguracji.

https://mariadb.com/resources/blog/starting-mysql-on-low-memory-virtual-machines/

sheng chi
źródło
Próbuję tego. Zgłosi się wkrótce po tym, jak dam tej usłudze kilka dni na utrzymanie ciągłości działania.
Matt Hamann,
Wygląda na to, że całkiem pomogło. Nie jestem pewien, w 100% rozwiązany, ale działał całkiem dobrze, odkąd to poprawiłem. Dzięki.
Matt Hamann