CentOS 7.2 Azure VM - MariaDB / Apache убивает память

У меня есть виртуальная машина Azure с CentOS 7.1, Apache 2.4.6 и MariaDB 5.5. Виртуальная машина имеет 2 ядра и 3,5 ГБ ОЗУ. На сервере размещен только небольшой сайт WordPress с почти нулевым трафиком.

Последние два дня MariaDB постоянно вылетает с ошибкой OOM. Я перепробовал столько разных вещей для настройки производительности, но пока ничего не помогло. Это текущая конфигурация из файла my.cnf :

[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
# Settings user and group are ignored when systemd is used.
# If you need to run mysqld under a different user or group,
# customize your systemd unit file for mariadb according to the
# instructions in http://fedoraproject.org/wiki/Systemd
performance_schema = off
innodb_buffer_pool_size = 1024M
key_buffer_size = 50M

[mysqld_safe]
log-error=/var/log/mariadb/mariadb.log
pid-file=/var/run/mariadb/mariadb.pid

Apache - это предварительная версия, и я добавил следующие настройки:

KeepAlive On
KeepAliveTimeout 3

StartServers 1
MinSpareServers 3
MaxSpareServers 6
ServerLimit 24
MaxClients 24
MaxRequestsPerChild 3000

Я тоже пробовал использовать настройки по умолчанию, и он без разницы. Вот примеры ошибок из журнала MariaDB:

160124 15:04:53 mysqld_safe Number of processes running now: 0
160124 15:04:53 mysqld_safe mysqld restarted
160124 15:05:47 [Note] /usr/libexec/mysqld (mysqld 5.5.44-MariaDB) starting as process 4014 ...
160124 15:05:47 InnoDB: The InnoDB memory heap is disabled
160124 15:05:47 InnoDB: Mutexes and rw_locks use GCC atomic builtins
160124 15:05:47 InnoDB: Compressed tables use zlib 1.2.7
160124 15:05:47 InnoDB: Using Linux native AIO
160124 15:05:48 InnoDB: Initializing buffer pool, size = 128.0M
InnoDB: mmap(137756672 bytes) failed; errno 12
160124 15:05:48 InnoDB: Completed initialization of buffer pool
160124 15:05:48 InnoDB: Fatal error: cannot allocate memory for the buffer pool
160124 15:05:48 [ERROR] Plugin 'InnoDB' init function returned error.
160124 15:05:48 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
160124 15:05:48 [ERROR] mysqld: Out of memory (Needed 128917504 bytes)
160124 15:05:48 [ERROR] mysqld: Out of memory (Needed 96681984 bytes)
160124 15:05:48 [ERROR] mysqld: Out of memory (Needed 72499200 bytes)
160124 15:05:51 [Note] Plugin 'FEEDBACK' is disabled.
160124 15:05:52 [ERROR] Unknown/unsupported storage engine: InnoDB
160124 15:05:52 [ERROR] Aborting

Что я могу сделать? У меня есть другие виртуальные машины в Azure с такими же характеристиками, на которых работает гораздо больше и более сложных сайтов, и у них нет сбоев.

EDIT Вот как выглядит память в течение одной минуты после запуска MariaDB:

[root@linuxvm admin]# systemctl start mariadb
[root@linuxvm admin]# free -m
              total        used        free      shared  buff/cache   available
Mem:           3442         670        2573           2         198        2577
Swap:           511          68         443
[root@linuxvm admin]# free -m
              total        used        free      shared  buff/cache   available
Mem:           3442        1181        2052           2         207        2059
Swap:           511          64         447
[root@linuxvm admin]# free -m
              total        used        free      shared  buff/cache   available
Mem:           3442        1523        1709           2         209        1715
Swap:           511          64         447
[root@linuxvm admin]# free -m
              total        used        free      shared  buff/cache   available
Mem:           3442        1829        1397           2         214        1404
Swap:           511          64         447
[root@linuxvm admin]# free -m
              total        used        free      shared  buff/cache   available
Mem:           3442        2713         506           2         222         515
Swap:           511          63         448
[root@linuxvm admin]# free -m
              total        used        free      shared  buff/cache   available
Mem:           3442        3206          93           2         143          59
Swap:           511          63         448
-1
задан 24 January 2016 в 17:16
2 ответа

Я просто вставлю это сюда если кому-то это нужно, потому что я буквально наткнулся на ответ сейчас, методом проб и ошибок, после целого дня устранения этой проблемы. Я прочитал так много сообщений и блогов, и ни один из них не рекомендовал добавлять директиву max_connections в my.cnf .

После добавления следующих строк все мои проблемы исчезли, и MariaDB / MySQL перестали занимать всю память. Возможно, вам потребуется скорректировать значения для вашего конкретного сценария.

[mysqld]
max_connections = 50
innodb_buffer_pool_size = 1024M
0
ответ дан 5 December 2019 в 20:30

По умолчанию на виртуальных машинах Linux не включена свопинг ...

Когда вы запускаете виртуальную машину, выбирается случайный «вычислительный узел», имеющий емкость размером выбранная вами виртуальная машина. Compute Node - это просто сильно модифицированная машина с установленным Hyper-V. Диск с ОС; / dev / sda не является локальным для этого сервера и, следовательно, не так быстро, как локальное хранилище. (а также с учетом регулирования, проверьте количество операций ввода-вывода в секунду, которое позволяет размер вашей виртуальной машины.)

Однако вы получите локальный временный диск на / dev / sdb, который подходит для подкачки. (/ dev / sdb). Проблема в том, что ваша виртуальная машина не всегда может быть размещена на одном вычислительном узле. (Если размер вашей виртуальной машины изменен или она выключена более чем на 5 минут, она считается «освобожденной», что означает, что при повторном запуске она имеет высокую вероятность использовать другой вычислительный узел, на котором не будет вашего локального диска.

Чтобы решить эту проблему, виртуальные машины Linux используют программное обеспечение под названием WALinuxAgent, которое, помимо прочего, позволяет создавать файл подкачки.Каждый раз, когда ваша виртуальная машина запускается, агент будет создавать файл подкачки на временном диске.

По умолчанию он не включен, но вы можете включить его в: /etc/waagent.conf[1248 visible Измените n на y и перезагрузитесь, таким образом, если mysqld использует слишком много памяти, OOM-killer не сработает и не отключит вашу виртуальную машину.

0
ответ дан 5 December 2019 в 20:30

Теги

Похожие вопросы