Spec-Zone.ru › MariaDB

Отладка работающего сервера (в Linux)

Даже если у вас нет сервера, скомпилированного для отладки, есть способы получить больше информации, если что-то пойдёт не так.

В случае возникновения проблем лучше использовать не сжатый дамп mysqld.

shell> file /usr/sbin/mysqld

Если здесь не указано «сжатый», то всё в порядке. В противном случае вам необходимо либо скачать двоичный файл с информацией для отладки, либо скомпилировать его без сжатия двоичного файла.

Отладка потребления памяти с помощью tcmalloc

Если у вас есть проблема с процессом mysqld, который постоянно растёт, вы можете использовать tcmalloc, чтобы выяснить, что выделяет память:

В зависимости от вашей системы, необходимо установить пакет tcmalloc (OpenSuse) или google-perftools-lib (RedHat, Centos).

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

HEAPPROFILE=/tmp/mysqld.prof /usr/sbin/mysqld_safe --malloc-lib=tcmalloc --core-file-size=unlimited --core-file

или, если вы предпочитаете вызывать mysqld напрямую:

ulimit -c unlimted
LD_PRELOAD=/usr/lib64/libtcmalloc.so.4 HEAPPROFILE=/tmp/mysqld.prof /usr/sbin/mysqld --core-file

Конечно, вы можете добавить другие опции mysqld в конец этой строки.

Теперь запустите свой клиент/приложение, использующее MariaDB. Вы можете найти место выделения памяти в файле /tmp/mysqld.prof. Если вы обнаружите какие-либо проблемы с памятью, пожалуйста, сообщите об этом в системе отслеживания ошибок MariaDB!

Защита ptrace и привязка GDB к экземпляру mysqld

Новые версии Ubuntu не позволяют одному процессу просматривать память процесса произвольного пользователя. В результате при попытке привязать GDB к работающему экземпляру MariaDB (или любого другого процесса) в GDB появляется следующая ошибка:

ptrace: Operation not permitted

Дополнительные сведения доступны в вики Ubuntu.

Для разрешения подключения GDB необходимо изменить значение параметра /proc/sys/kernel/yama/ptrace_scope sysctl.

  • Для временного изменения откройте оболочку root и выполните:
    echo 0 > /proc/sys/kernel/yama/ptrace_scope
    
  • Для постоянного изменения отредактируйте как root:
    /etc/sysctl.d/10-ptrace.conf
    
    и установите значение в 0.

Отладка зависающего сервера

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

Предпочтительно, чтобы сервер был скомпилирован для отладки, но это не строго необходимо:

cmake -DCMAKE_BUILD_TYPE=Debug -DWITH_VALGRIND=ON .
make -j4

Чтобы узнать, что делает сервер:

  • Определите номер процесса mysqld
ps -edalf | grep mysqld
  • Присоединитесь к процессу и получите трассировку стека:
gdb -p 'pid of mysqld' path-to-mysqld
set height 0
set logging file /tmp/mysqld.log
set logging on
thread apply all backtrace full

После этого у вас будет полная трассировка стека, включая все локальные переменные, в файле mysqld.log. Обратите внимание, что вы получите все переменные только если сервер не сжат.

Содержимое, воспроизведённое на этом сайте, является собственностью соответствующих владельцев, и это содержимое не проверяется предварительно 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/debugging-a-running-server-on-linux/

Spec-Zone.ru

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