Если случилась паника: создание дампа вручную


Предположим, что отладчик уже присутствует в ядре, раздел свопинга в состоянии вместить дамп и машина сконфигурирована так, что не предусматривает автоматическую перезагрузку после паники. Однажды одна из ваших машин исчезла из сети. Вы взглянули на консоль, но видите там только какое-то непонятное сообщение, ниже которого светится приглашение к вводу db>. Или, может быть, вы нажали клавишу Enter на последовательной консоли только для того, чтобы увидеть приглашение к вводу db>. FreeBSD ждет от вас команды на перезагрузку после паники.

Пока машина находится в отладчике, у вас есть возможность получить кое-какую отладочную информацию. Если на экране имеется сообщение — скопируйте его. Если нет — дайте отладчику команду повторить его:

db> panic
panic: from debugger
cpuid = 0
Uptime: 2m38s
panic: _mtx_lock_sleep: recursed on non-recursive mutex ahc_lock @ /usr/src/
sys/cam/cam_periph.h:182
...

Отладчик повторно выведет для вас сообщение о панике.

Вы также можете получить дополнительную информацию о панике:

db> trace
Tracing pid 12 tid 100002 td 0xc2117c00
kdb_enter(c0a908ed,0,3e9,c0b9fe2c,0,...) at kdb_enter+0x32
panic(c0a8f7ce,c0a54565,c0a4ba56,b6,c228ca30,...) at panic+0x124
_mtx_lock_sleep(c228ca30,c2117c00,0,c0a4ba56,b6,...) at _mtx_lock_sleep+0x47
_mtx_lock_flags(c228ca30,0,c0a4ba56,b6,780,...) at _mtx_lock_flags+0xef
...

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

Перед перезагрузкой сделайте дамп оперативной памяти.

db> continue
Physical memory: 243 MB
Dumping 62 MB: 47 31 15
Dump complete
= 0xf

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

Если дамп не нужен, можно просто перезагрузить машину:

db> reset

Сервер перезагрузится и приступит к работе. Если был установлен параметр KDB_UNATTENDED, машина перезагрузится без всех этих сложностей, как если бы вы ввели команду continue.

Комментарии запрещены.