Tarantool CE/EE Documentation portal logo
Помощь
Обновлена 15 сентября 2026 г. в 08:55

Контроль за фоновыми программами

Сигналы от сервера

В событийном цикле транзакционного потока Tarantool обрабатывает следующие сигналы:

Сигнал

Действие

SIGHUP

Может вызывать ротацию файла журнала. См. пример в справочнике по параметрам журналирования Tarantool.

SIGUSR1

Может вызывать создание контрольной точки базы данных. См. подробнее.

SIGTERM

Может вызывать корректное завершение работы (сначала будет сохранена информация).

SIGINT (также известен как прерывание с клавиатуры)

Может вызывать корректное завершение работы.

SIGKILL

Вызывает немедленное завершение работы.

Остальные сигналы приводят к заданному операционной системой поведению. Все сигналы, кроме SIGKILL, можно игнорировать, особенно если Tarantool выполняет длительную операцию и не может вернуться в событийный цикл транзакционного потока.

Автоматическая перезагрузка экземпляра

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

$ systemctl status tarantool@my_app|grep PIDMain PID: 5885 (tarantool)$ tt connect my_app   • Connecting to the instance...   • Connected to /var/run/tarantool/my_app.control/var/run/tarantool/my_app.control> os.exit(-1)   ⨯ Connection was closed. Probably instance process isn't running anymore

А теперь убедимся, что systemd перезапустил его:

$ systemctl status tarantool@my_app|grep PIDMain PID: 5914 (tarantool)

Информацию о перезапуске экземпляра можно найти в журналах загрузки:

$ journalctl -u tarantool@my_app -n 8

Создание дампов памяти

Tarantool создает дамп памяти при получении одного из следующих сигналов: SIGSEGV, SIGFPE, SIGABRT или SIGQUIT. При сбое Tarantool дамп создается автоматически.

На платформах с поддержкой systemd утилита coredumpctl автоматически сохраняет дампы памяти и трассировку стека при аварийном завершении Tarantool. Для включения создания дампов памяти в Unix-системе:

  1. Убедитесь, что лимиты сеанса настроены для создания дампов памяти, то есть выполните ulimit -c unlimited. Другие причины, по которым дамп памяти может не создаваться, можно проверить в "man 5 core".
  2. Задайте каталог для записи дампов памяти и убедитесь, что он доступен для записи. В Linux путь к каталогу задается через параметр ядра, настраиваемый через /proc/sys/kernel/core_pattern.
  3. Убедитесь, что дампы памяти содержат информацию о трассировке стека. При использовании бинарного дистрибутива Tarantool это настроено автоматически. При сборке Tarantool из исходных кодов подробная информация будет недоступна, если при вызове передать CMake в -DCMAKE_BUILD_TYPE=Release.

Чтобы симулировать сбой, можно выполнить некорректную операцию на экземпляре Tarantool:

$ # !!! никогда не делайте этого на работающем экземпляре (продакшене) !!!$ tt connect my_app   • Connecting to the instance...   • Connected to /var/run/tarantool/my_app.control/var/run/tarantool/my_app.control> require('ffi').cast('char *', 0)[0] = 48   ⨯ Connection was closed. Probably instance process isn't running anymore

Другой способ - если известен PID экземпляра ($PID в примере ниже), его можно остановить, запустив отладчик gdb:

$ gdb -batch -ex "generate-core-file" -p $PID

Или послав вручную сигнал SIGABRT:

$ kill -SIGABRT $PID

Чтобы посмотреть последние сбои Tarantool-демона на платформах с systemd, выполните команду:

$ coredumpctl list /usr/bin/tarantoolMTIME                            PID   UID   GID SIG PRESENT EXESat 2016-01-23 15:21:24 MSK   20681  1000  1000   6   /usr/bin/tarantoolSat 2016-01-23 15:51:56 MSK   21035   995   992   6   /usr/bin/tarantool

Чтобы сохранить дамп памяти в файл, выполните команду:

$ coredumpctl -o filename.core info <pid>

Трассировка стека

Поскольку Tarantool хранит кортежи в памяти, файлы дампов памяти могут быть довольно большими. Для поиска проблемы обычно не нужен весь файл - достаточно трассировки стека (stack trace).

Чтобы сохранить трассировку стека в файл, выполните команду:

$ gdb -se "tarantool" -ex "bt full" -ex "thread apply all bt" --batch -c core> /tmp/tarantool_trace.txt

где:

  • "tarantool" – путь к исполняемому файлу Tarantool,
  • "core" – путь к файлу дампа памяти, и
  • "/tmp/tarantool_trace.txt" - пример пути к файлу для сохранения трассировки стека.

Чтобы получить трассировку стека и прочую полезную информацию в консоли, выполните команду:

$ coredumpctl info 21035          PID: 21035 (tarantool)          UID: 995 (tarantool)          GID: 992 (tarantool)       Signal: 6 (ABRT)    Timestamp: Sat 2016-01-23 15:51:42 MSK (4h 36min ago) Command Line: tarantool my_app.lua <running>   Executable: /usr/bin/tarantoolControl Group: /system.slice/system-tarantool.slice/tarantool@my_app.service         Unit: tarantool@my_app.service        Slice: system-tarantool.slice      Boot ID: 7c686e2ef4dc4e3ea59122757e3067e2   Machine ID: a4a878729c654c7093dc6693f6a8e5ee     Hostname: localhost.localdomain      Message: Process 21035 (tarantool) of user 995 dumped core.               Stack trace of thread 21035:               #0  0x00007f84993aa618 raise (libc.so.6)               #1  0x00007f84993ac21a abort (libc.so.6)               #2  0x0000560d0a9e9233 _ZL12sig_fatal_cbi (tarantool)               #3  0x00007f849a211220 __restore_rt (libpthread.so.0)               #4  0x0000560d0aaa5d9d lj_cconv_ct_ct (tarantool)               #5  0x0000560d0aaa687f lj_cconv_ct_tv (tarantool)               #6  0x0000560d0aaabe33 lj_cf_ffi_meta___newindex (tarantool)               #7  0x0000560d0aaae2f7 lj_BC_FUNCC (tarantool)               #8  0x0000560d0aa9aabd lua_pcall (tarantool)               #9  0x0000560d0aa71400 lbox_call (tarantool)               #10 0x0000560d0aa6ce36 lua_fiber_run_f (tarantool)               #11 0x0000560d0a9e8d0c _ZL16fiber_cxx_invokePFiP13__va_list_tagES0_ (tarantool)               #12 0x0000560d0aa7b255 fiber_loop (tarantool)               #13 0x0000560d0ab38ed1 coro_init (tarantool)               ...

Отладчик

Для запуска отладчика gdb выполните команду:

$ coredumpctl gdb <pid>

Настоятельно рекомендуется установить пакет tarantool-debuginfo, чтобы сделать отладку через gdb более эффективной. Например:

$ dnf debuginfo-install tarantool

С помощью gdb можно узнать, какие еще debuginfo-пакеты нужно установить:

$ gdb -p <pid>...Missing separate debuginfos, use: dnf debuginfo-installglibc-2.22.90-26.fc24.x86_64 krb5-libs-1.14-12.fc24.x86_64libgcc-5.3.1-3.fc24.x86_64 libgomp-5.3.1-3.fc24.x86_64libselinux-2.4-6.fc24.x86_64 libstdc++-5.3.1-3.fc24.x86_64libyaml-0.1.6-7.fc23.x86_64 ncurses-libs-6.0-1.20150810.fc24.x86_64openssl-libs-1.0.2e-3.fc24.x86_64

В трассировке стека присутствуют символические имена, даже если у вас не установлен пакет tarantool-debuginfo.