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.


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/


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.