Spec-Zone.ru › MariaDB

Включение дампов ядер

Включение в файле параметров

MariaDB, начиная с 10.4

В MariaDB 10.4 и более поздних версиях дампы ядер включены по умолчанию в Windows, поэтому этот шаг можно пропустить в Windows в этих версиях. См. MDEV-18439 для получения дополнительной информации.

Для включения дампов ядер необходимо установить системную переменную core_file либо в командной строке, либо в соответствующей группе серверных параметров группа параметров в файле параметров. Например:

[mariadb]
...
core_file

Вы можете проверить текущее значение, выполнив:

my_print_defaults --mysqld
MariaDB, начиная с 10.1.35

В MariaDB 10.1.35, MariaDB 10.2.17, MariaDB 10.3.9 и более поздних версиях core_file также была преобразована в системную переменную. Ранее она была просто опцией. Ее значение можно проверить во время выполнения, выполнив следующее:

SHOW GLOBAL VARIABLES LIKE 'core_file';

Файлы ядра в Linux

Есть некоторые дополнительные детали, связанные с использованием файлов ядра в Linux.

Отключение ограничений размера файла ядра в Linux

На некоторых системах есть ограничение на размер файлов ядра, которые могут быть созданы. Вы можете проверить текущее системное ограничение, выполнив следующее:

ulimit -c

Вы можете проверить текущее ограничение для процесса mysqld конкретно, выполнив следующее:

sudo cat /proc/$(pidof mysqld)/limits | grep "core file"

Если вам нужно изменить ограничение размера ядра, используемый метод зависит от того, как вы запускаете mysqld. Подробности см. в разделах ниже.

MariaDB, начиная с 10.2.24

В MariaDB 10.2.24, MariaDB 10.3.15 и MariaDB 10.4.5 и более поздних версиях лимиты ресурсов для процесса mysqld выводятся в файл журнала ошибок при сбое процесса mysqld. Таким образом, пользователи могут подтвердить, было ли процессу разрешено создавать дамп ядра. См. MDEV-15051 для получения дополнительной информации.

Запуск mysqld с помощью mysqld_safe

Если вы запускаете MariaDB, выполнив mysqld_safe, то настройка следующего параметра в группе параметров [mysqld_safe] в файле параметров должна позволить создавать файлы ядра неограниченного размера:

[mysqld_safe]
...
core_file_size=unlimited

Вы можете проверить текущие значения, выполнив:

my_print_defaults mysqld_safe

См. mysqld_safe: Настройка размера файла ядра для получения дополнительной информации.

Примечание: Если вы используете mysqld_safe и запускаете mysqld как пользователя root, то на некоторых системах файл ядра не создается. Решением является запуск mysqld под другим пользователем.

Запуск mysqld вручную

Если вы запускаете mysqld вручную или в пользовательском скрипте, вы можете разрешить создание файлов ядра неограниченного размера, выполнив следующее в той же оболочке или скрипте, в которой выполняется mysqld:

ulimit -c unlimited

Запуск mysqld с помощью systemd

Если вы запускаете mysqld с помощью systemd, то вам может потребоваться настроить службу MariaDB для создания файлов ядра неограниченного размера. Например, вы можете выполнить следующее:

Используя sudo systemctl edit mariadb.service добавьте содержимое:

[Service]

LimitCORE=infinity

См. systemd: Настройка размера файла ядра для получения дополнительной информации.

Изменение системного ограничения

Если вы хотите изменить системное ограничение, чтобы разрешить создание файлов ядра неограниченного размера для учетной записи пользователя mysql, вы можете сделать это, добавив следующие строки в файл в /etc/security/limits.d/. Например:

sudo tee /etc/security/limits.d/mariadb_core.conf <<EOF
mysql soft core unlimited
mysql hard core unlimited
EOF

Для того чтобы это изменение вступило в силу, потребуется перезагрузка системы.

См. Настройка Linux для MariaDB: Настройка размера файла ядра для получения дополнительной информации.

Установка пути в Linux

Если вы используете Linux, то может быть полезно изменить несколько настроек, чтобы изменить местоположение файлов ядра и имя файла. Это делается путем настройки атрибутов kernel.core_pattern и kernel.core_uses_pid. Вы можете проверить текущие значения, выполнив следующее:

sysctl kernel.core_pattern
sysctl kernel.core_uses_pid

Если вы используете mysql-test-run и хотите включить ядро в результаты теста, оптимальной настройкой, вероятно, будет следующее (хранить ядра в текущем каталоге в виде core.number-of-process-id)

sudo sysctl kernel.core_pattern=core.%p kernel.core_uses_pid=0

Если вы используете производственную систему, вероятно, вы хотите хранить файлы ядра в определенном каталоге, а не в каталоге данных. Временное изменение места хранения ядер может быть выполнено с помощью утилиты sysctl, но чаще всего это изменение производится в файловой системе /proc. См. следующий пример:

sudo mkdir /tmp/corefiles
sudo chmod 777 /tmp/corefiles
sudo echo /tmp/corefiles/core > /proc/sys/kernel/core_pattern
sudo echo 1 > /proc/sys/kernel/core_uses_pid

Данные команды укажут системе помещать файлы ядра в /tmp/corefiles, а также добавить идентификатор процесса в имя файла.

Чтобы сделать эти изменения постоянными, вы можете добавить следующее в файл в /etc/sysctl.conf.d/. Например:

sudo tee /etc/sysctl.d/mariadb_core.conf <<EOF
kernel.core_pattern=/tmp/corefiles/core
kernel.core_uses_pid=1
EOF
MariaDB, начиная с 10.2.24

В MariaDB 10.2.24, MariaDB 10.3.15 и MariaDB 10.4.5 и более поздних версиях значение kernel.core_pattern выводится в файл журнала ошибок при сбое процесса mysqld. Таким образом, пользователи могут определить, где процесс мог создать дамп ядра. См. MDEV-15051 для получения дополнительной информации.

MariaDB до 10.2.23

В MariaDB 10.2.23, MariaDB 10.3.14 и MariaDB 10.4.4 и ранее, в файл журнала ошибок включается сообщение, указывающее, что файл ядра будет записан в datadir, когда процесс mysqld завершается с ошибкой, даже если это не соответствует действительности, потому что kernel.core_pattern фактически настроил процесс записи файла ядра в другой каталог.

Примечание: Убедитесь, что на диске достаточно свободного места в каталоге, указанном kernel.core_pattern.

Извлечение дампов ядер Linux с помощью systemd-coredump

Управление дампом ядра можно автоматизировать с помощью утилиты coredumpctl.

По умолчанию это включено в Red Hat Enterprise Linux 8 и CentOS 8, а также, возможно, в других современных дистрибутивах Linux. Это легко проверить, посмотрев на kernel.core_pattern setting. Если система выглядит так, что systemd-coredump включен:

# sysctl kernel.core_pattern
kernel.core_pattern = |/usr/lib/systemd/systemd-coredump %P %u %g %s %t %c %h %e

В других дистрибутивах, таких как Ubuntu (по крайней мере, до версии 21.10), он не включен по умолчанию, но может быть настроен вручную.

Чтобы увидеть все последние дампы ядра на системе, можно просто выполнить

# coredumpctl list

Или вы можете проверить дампы ядра сервера MariaDB конкретно с помощью:

# coredumpctl list /usr/sbin/mariadbd 

Если фактический файл ядра был сохранен, вы увидите present в столбце COREFILE вывода, и затем вы можете извлечь файл ядра с помощью:

# coredump dump -o mariadbd.core ...PID...

используя номер процесса из столбца PID или при желании получить последнюю запись, связанную с сервером MariaDB:

# coredump dump -o mariadb.core /usr/sbin/mariadbd

Начиная с версии systemd 248, также можно вызвать отладчик gdb непосредственно с помощью новой опции --debugger-arguments=..., например, сделав извлечение всех стеков потоков из последнего сбоя сервера MariaDB одной строкой, без предварительного извлечения файла ядра (требуется установка gdb)

# coredumpctl debug --debugger-arguments="-batch -ex 'thread apply all bt full'" /usr/sbin/mariadbd

Пока ни одна из долгосрочных версий Linux дистрибутивов не имеет достаточно новой версии systemd для этого, (по состоянию на момент написания) предстоящая версия Ubuntu 22.04 "Jammy Jellyfish" будет, вероятно, первой, которая поддержит это.

Дампы ядер и setuid в Linux

Поскольку mysqld выполняет setuid, вам может потребоваться установить fs.suid_dumpable=2 для разрешения дампов ядер в Linux. Вы можете проверить текущее значение fs.suid_dumpable с помощью утилиты sysctl. Например:

sysctl fs.suid_dumpable

Временно установить его в 2 можно с помощью утилиты sysctl. Например:

sudo sysctl -w fs.suid_dumpable=2

Или временно установить его в 2, записывая в файловую систему /proc. Например:

sudo echo 2 > /proc/sys/fs/suid_dumpable

Если вы хотите сделать его постоянным значением 2, вы можете добавить следующее в файл в /etc/sysctl.conf.d/. Например:

sudo tee /etc/sysctl.d/mariadb_fs_suid_dumpable.conf <<EOF
fs.suid_dumpable=2
EOF

Примечание: Если вы не хотите изменять fs.suid_dumpable, то другим решением является запуск mysqld непосредственно как пользователя mysql, чтобы вызов setuid не был необходим.

Принудительное создание файла core на Linux

Чтобы принудительно создать файл core для mysqld можно отправить процессу сигнал sigabrt, у которого код сигнала 6. Это очень полезно для получения состояния неоткликаемого процесса mysqld. Однако это приведёт к падению mysqld, и при перезапуске будет выполнена процедура восстановления после сбоя.

Отправить сигнал можно с помощью команды kill. Например:

sudo kill -6 $(pidof mysqld)

В качестве альтернативы $(pidof mysqld), можно найти идентификатор процесса, используя утилиту ps или проверив переменную среды pid_file.

Файлы core в Windows

В MariaDB 10.4 и более поздних версиях дампы core по умолчанию включены в Windows. Дополнительную информацию см. в MDEV-18439.

Существуют дополнительные детали, связанные с использованием файлов core в Windows.

Файлы core в Kubernetes

См. проект IBM Обработчик дампов core.

Файлы minidump в Windows

В Windows файл core создается как файл minidump.

Подробную информацию о конфигурации и чтении файла minidump см. в Инструкции по чтению файла дампов памяти, создаваемого Windows в случае сбоя.

Файлы core и Address Sanitizer (ASAN)

Если ваш двоичный файл mysqld скомпилирован с Address Sanitizer (ASAN), то он не сможет сгенерировать файл core.

Что включено в файлы core

Файлы core обычно содержат дамп всей памяти в полном адресном пространстве процесса. Это означает, что если на сервере настроены некоторые большие буферы (например, большой InnoDB буферный пул), то файлы core сервера могут быть очень большими.

Однако, в MariaDB 10.3.7 и более поздних версиях некоторые большие буферы исключены из файлов core на некоторых системах, как способ уменьшения размера.

Исключаются следующие буферы:

  • InnoDB буферный пул
  • InnoDB журнал буфер
  • InnoDB буфер журнала Redo (фиксировано 2М)
  • Кэш запросов

Буферы исключаются только на Linux при использовании ядра версии 3.4 и выше и при использовании не-отладочной сборки mysqld. Некоторые версии Linux ядра имеют ошибку, которая приведет к печати следующего предупреждения в журнал:

Sep 25 10:41:19 srv1 mysqld: 2018-09-25 10:41:19 0 [Warning] InnoDB: Failed to set memory to DODUMP: Invalid argument ptr 0x2aaac3400000 size 33554432

В этих случаях дамп core может исключить некоторые дополнительные данные. Если это не вызывает беспокойства, то предупреждение можно проигнорировать. Проблема может быть решена обновлением до версии Linux ядра, в которой ошибка исправлена.

См. также

  • Как получить полную трассировку стека для mysqld
  • Как отладить файлы core аварийно завершившихся приложений Linux
  • Приятная функция в MariaDB 10.3: InnoDB буферный пул не включается в файлы core
  • Получение файла core MySQL на Linux
Содержимое, воспроизведенное на этом сайте, является собственностью соответствующих владельцев, и это содержимое не проверяется предварительно MariaDB. Мнения, информация и мнения, выраженные в этом содержании, не обязательно отражают точку зрения MariaDB или любой другой стороны.

© 2023 MariaDB
Licensed under the Creative Commons Attribution 3.0 Unported License and the GNU Free Documentation License.
https://mariadb.com/kb/en/enabling-core-dumps/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API