Создаю тему из сохраненных ранее страниц, оригинальное название "Crash dump'ы под Linux".
Автор оригинальной темы
mentat.
Содержание почти полностью переделано.
Выкладываю во вложениях 3 из 4 страницы(одной страницы нет т.к. там был просто флуд и никакой смысловой нагрузки он не нес).
Нам понадобится:- Отладчик gdb
- *nix система
- руки и мозг(опционально, но желательно все таки их наличие )
*Заметка: для удобной отладки нужно чтобы мангос был собран с опцией "--with-debug-info", иначе не будет достаточной информации о причине падения сервера. Также для избежание неприятных ситуаций рекомендуется иметь хороший запас места на жестком диске.
Цитата:
Установка gdb происходит также как и любой другое программное обеспечение в системе, а именно через системы: emerge - Gentoo, aptitude(apt-get, etc) - Deb системы(Debian, Ubuntu, etc), zypper или yum - rpm системы(Opensuse,Fedora)
*В openSuse для этого можно воспользоваться yast'том(YaST2 - universal configuration utility), как GUI версией, так и консольной на ncurses с псевдографикой
|
Заметка: Самый простой способ отловить падение сервера, это использовать отладчик gdb напрямую, то есть
$gdb --command=/path/to/bt mangos-world (для более подробной информации
man gdb)
При открытии интерактивного режима, ввести команду run, после нее должен произойти старт приложения указанного ранее, в нашем случае "mangos-world".
При падении отладочная информация выведется на экран и игровой мир "повиснет"
Цитата:
Сообщение от anemak
Рекомендую к прочтению
Код:
http://getmangos.com/community/showthread.php?4579-%5BHOWTO%5D-GDB-Debugging
|
И так начнем...
Для отладки Mangos под *nix нужно:
Linux:
1)Включаем генерацию дампов на текущую сессию
и/или в файл
/etc/security/limits.conf добавить
Код:
* hard core unlimited
*заметка: я бы так не советовал делать лишь по 1 причине, после этого на все сессии будет распространятся создание коре дапов при падениях приложений , и на харде будет постепенно собираться мусор. На мой взгляд гораздо правильней сделать 1 способом и использовать эту команду либо в скрипте запуска, либо напрямую в консоли.
2)
2.1) Прежде чем редактировать файл
/etc/sysctl.conf нужно определить точные имена некоторых переменных
в консоли:
Код:
cat /proc/sys/fs/suid_dumpable
Ответ должен быть в виде 0 "нуля" и значить файл существует. если не существует такого файла то пробуем:
Код:
cat /proc/sys/kernel/suid_dumpable
Ответ должен быть таким же, как и ожидался ранее.
*заметка: В большинстве систем обычно первый файл присутствует
2.2) Создаем папку и ставим права доступа 777
Код:
mkdir -p /var/log/dumps
chmod -R 777 /var/log/dumps
2.3) Приступаем к редактированию файла
/etc/sysctl.conf
Добавляем в конец файла строчки(
!!!в место "[define]" вставляем то выделенное слово, из предыдущего действия, где файл имелся в наличии и возвращался какой либо результат!!!):
Код:
[define].suid_dumpable=2
kernel.core_pattern="/var/log/dumps/%e.%p.core"
Эти параметры будут действовать после перезагрузки системы, для мгновенного результата можно выполнить 2 команды
Код:
sysctl -w [define].suid_dumpable=2
sysctl -w kernel.core_pattern="/var/log/dumps/core.%e.%p"
*заметка: для того чтобы узнать более подробно о %e и %p смотрим man core
Теперь дампы будут ложиться в папку /var/log/dumps/
*BSD:
***под бсд системами это не проверялось, то есть это переделанный копипаст***
1)Должна быть включена опция в ядре:
Код:
makeoptions DEBUG=-g # Build kernel with gdb(1) debug symbols
2) в файле /etc/sysctl.conf добавляем следующие строки:
Код:
kern.coredump=1
kern.corefile=/home/cores/%U.%N.core
Чтобы изменения применились сразу выполняем следующие команды:
Код:
sysctl -w kern.coredump=1
sysctl -w kern.corefile=/home/cores/%U.%N.core
При этом - директория /home/cores/ должна существовать и на нее должны стоять соответствующие права для возможности записи туда файлов.
Работа с отладчиком GDB:
2) Создать файл(создать можно где душе угодно, лишь бы было бы удобно)
bt с содержанием
*заметка: для более полной информации о командах отладчика нужно смотреть man gdb
смотрим коре дамп в отладчике
Код:
gdb /path/to/mangos-worldd -c /path/to/[имя файла дампа].core -n --command=/path/to/bt
для вывода данных в файл можно воспользоваться таким способом
Код:
gdb /path/to/mangos-worldd -c /path/to/[имя файла дампа].core -n --batch --command=/path/to/bt >> dump.log
*заметка: в зависимости от содержания файла bt будет зависеть вывод информации о дампе
Ресурсы с которых бралась информация:
1) _http://linux.die.net/man/5/core также можно это глянуть через
man core
2) _http://www.randombugs.com/linux/core-dumps-linux.html
использовалась система OpenSuse11.2(2.6.31.5-0.1-default)