Глава 34. Устранение неполадок
Postgres Pro предоставляет возможность выгружать состояние серверного процесса путём включения параметра конфигурации crash_info, что может быть полезно для диагностики и отладки. Чтобы настроить это, выполните следующие шаги:
Подключитесь к СУБД и узнайте PID обслуживающего процесса текущего сеанса:
postgres=# select pg_backend_pid(); pg_backend_pid ---------------- 23770
Отправьте сигнал SIGSEGV процессу с данным PID:
kill -11 23770
Это приведёт к сбою этого процесса, а в каталог /var/lib/postgresql/crashinfo
запишется файл, содержащий время, обратную трассировку и причину ошибки:
# Signal Program received signal: 11 (SIGSEGV) Signal UTC date time: 25.10.2024 08:37:02 # Program pid: 23770 ppid: 17506 program_invocation_name: postgres: postgres postgres 10.42.42.10(34202) idle program_invocation_short_name: tgres 10.42.42.10(34202) idle exe_path: /opt/pgpro/sdm-17/bin/postgres exe: postgres # Backtrace 1 postgres + 0x5b55c0 0x55c5ba8459b7 0x00007ffcbef19070 bt_crash_handler + 0x3f7 2 libc.so.6 + 0x4251f 0x7f01c2caa520 0x00007ffcbef19140 __sigaction + 0x50 unknown ./signal/../sysdeps/unix/sysv/linux/x86_64/libc_sigaction.c:0 3 libc.so.6 + 0x125f80 0x7f01c2d8df9a 0x00007ffcbef195b8 epoll_wait + 0x1a epoll_wait ../sysdeps/unix/sysv/linux/epoll_wait.c:30 4 postgres + 0x433870 0x55c5ba6c39bb 0x00007ffcbef195c0 WaitEventSetWait + 0x14b 5 postgres + 0x320de0 0x55c5ba5b0e74 0x00007ffcbef19650 secure_read + 0x94 6 postgres + 0x327d20 0x55c5ba5b7dae 0x00007ffcbef196a0 pq_recvbuf + 0x8e 7 postgres + 0x328980 0x55c5ba5b8995 0x00007ffcbef196c0 pq_getbyte + 0x15 8 postgres + 0x457da0 0x55c5ba6e909c 0x00007ffcbef196d0 PostgresMain + 0x12fc 9 postgres + 0x3ce210 0x55c5ba65ef86 0x00007ffcbef19a60 ServerLoop + 0xd76 10 postgres + 0x3cf240 0x55c5ba65fe18 0x00007ffcbef1a040 PostmasterMain + 0xbd8 11 postgres + 0x14ecc0 0x55c5ba3df182 0x00007ffcbef1a0c0 main + 0x4c2 12 libc.so.6 + 0x29d10 0x7f01c2c91d90 0x00007ffcbef1a0f0 __libc_init_first + 0x90 __libc_start_call_main ../sysdeps/nptl/libc_start_call_main.h:58 13 libc.so.6 + 0x29dc0 0x7f01c2c91e40 0x00007ffcbef1a190 __libc_start_main + 0x80 call_init ../csu/libc-start.c:128 __libc_start_main_impl ../csu/libc-start.c:379 14 postgres + 0x14f200 0x55c5ba3df225 0x00007ffcbef1a1e0 _start + 0x25
Файл состояния выгрузки можно сгенерировать одним из следующих способов:
Отправив сигнал
40
(также называемый сигналом выгрузки для диагностики):kill -40
идентификатор_процесса
Используя функцию
pg_diagdump()
:SELECT pg_diagdump(
идентификатор_процесса
);
Здесь идентификатор_процесса
— идентификатор серверного процесса, для которого нужно выгрузить состояние.
В результате Postgres Pro выгрузит состояние в файл в каталоге $PGDATA/crash_info
по умолчанию или в каталоге, указанном в параметре конфигурации crash_info_location. Имя файла генерируется по следующему шаблону: crash_
. Источники данных для выгрузки состояния можно задать в параметре конфигурации crash_info_dump.ид_файла
_pidид_процесса
.state
В примере ниже показано, как создать и просмотреть файл состояния для серверного процесса с PID 23111
:
-- Создание файла состояния SELECT pg_diagdump(23111); -- Исследование каталога crash_info и его содержимого SELECT pg_ls_dir('crash_info'); -- Чтение содержимого файла состояния SELECT pg_read_file('crash_info/crash_1722943138419104_pid23111.state');