Ru-MaNGOS

Вернуться   Ru-MaNGOS > Документация > Прочая документация

Важная информация

Прочая документация Помощь, книги, инструкции, описания

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
Старый 11.03.2010, 13:09   #1
CruncH
Пользователь
 
Регистрация: 07.03.2010
Адрес: Норильск
Сообщений: 51
Сказал(а) спасибо: 28
Поблагодарили 31 раз(а) в 15 сообщениях
Записей в дневнике: 3
CruncH На верном пути
Отправить сообщение для CruncH с помощью ICQ
Лампочка Crash dump'ы под *nix

Создаю тему из сохраненных ранее страниц, оригинальное название "Crash dump'ы под Linux".
Автор оригинальной темы mentat.
Содержание почти полностью переделано.
Выкладываю во вложениях 3 из 4 страницы(одной страницы нет т.к. там был просто флуд и никакой смысловой нагрузки он не нес).

Нам понадобится:
  1. Отладчик gdb
  2. *nix система
  3. руки и мозг(опционально, но желательно все таки их наличие )
*Заметка: для удобной отладки нужно чтобы мангос был собран с опцией "--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 с псевдографикой

И так начнем...
Для отладки Mangos под *nix нужно:

Linux:
1)Включаем генерацию дампов на текущую сессию
Код:
ulimit -c unlimited
и/или в файл /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 с содержанием
Код:
bt full
*заметка: для более полной информации о командах отладчика нужно смотреть 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)
Вложения
Тип файла: zip index1.htm.zip (55.0 Кб, 596 просмотров)

Последний раз редактировалось CruncH; 10.05.2010 в 21:19.
CruncH вне форума   Ответить с цитированием
14 пользователя(ей) сказали cпасибо:
Chestarfild (12.05.2010), Feel the Power (12.03.2010), FreeBSD (03.10.2010), PSZ (23.03.2010), Sid (07.04.2011), sven (16.03.2010), Viste (11.03.2010)
Старый 11.03.2010, 22:05   #2
CruncH
Пользователь
 
Регистрация: 07.03.2010
Адрес: Норильск
Сообщений: 51
Сказал(а) спасибо: 28
Поблагодарили 31 раз(а) в 15 сообщениях
Записей в дневнике: 3
CruncH На верном пути
Отправить сообщение для CruncH с помощью ICQ
По умолчанию

Дописал все что требовалось, скрипты не выносил из тех страниц по той причине что их нужно делать универсальными, а не заточенными под конкретную систему.
__________________
CruncH вне форума   Ответить с цитированием
Старый 15.03.2010, 22:52   #3
anemak
Гость
 
Сообщений: n/a
По умолчанию

Рекомендую к прочтению
Код:
http://getmangos.com/community/showthread.php?4579-%5BHOWTO%5D-GDB-Debugging
  Ответить с цитированием
Пользователь сказал cпасибо:
CruncH (18.03.2010)
Старый 18.03.2010, 04:24   #4
muraig
Гость
 
Сообщений: n/a
По умолчанию Core.damp

Цитата:
Сообщение от CruncH Посмотреть сообщение
Создаю тему из сохраненных ранее страниц, оригинальное название "Crash dump'ы под Linux".
Автор оригинальной темы mentat.
Содержание почти полностью переделанно.
Выкладываю во вложениях 3 из 4 страницы(одной страницы нет т.к. там был просто флуд и никакой смысловой нагрузки он не нес).
при включении опции
Код:
--with-debug-info
исполняемые файлы могут достигать намного больших размеров:


когда все это падает в корку - на винте должно быть не менее ~500 Mb свободного места..учтите это, а то я систему колом поставил, когда неожиданно организовал пару "корок"
при сборке с опцией
Код:
--with-debug-info
есть еще один ньюанс - в процессе сборки необходимо иметь до 4Gb свободного места..именно до такого размера может вырасти папочка, в которой компилиться проект
  Ответить с цитированием
Пользователь сказал cпасибо:
CruncH (18.03.2010)
Старый 18.03.2010, 09:18   #5
CruncH
Пользователь
 
Регистрация: 07.03.2010
Адрес: Норильск
Сообщений: 51
Сказал(а) спасибо: 28
Поблагодарили 31 раз(а) в 15 сообщениях
Записей в дневнике: 3
CruncH На верном пути
Отправить сообщение для CruncH с помощью ICQ
По умолчанию

muraig, то что корки могут весить очень много(размер равен ~занимаемоей памяти в озу), я это знаю. Там не так место на диске нужно будет, как скорость записи этой корки на жесткий диск. Так как пока корка не сольется на жесткий, "авторестартер" не запустит новый процесс ядра.
__________________
CruncH вне форума   Ответить с цитированием
Пользователь сказал cпасибо:
Старый 19.03.2010, 20:50   #6
muraig
Гость
 
Сообщений: n/a
По умолчанию Core.damp

Цитата:
Сообщение от CruncH Посмотреть сообщение
muraig, то что корки могут весить очень много(размер равен ~занимаемоей памяти в озу), я это знаю. Там не так место на диске нужно будет, как скорость записи этой корки на жесткий диск. Так как пока корка не сольется на жесткий, "авторестартер" не запустит новый процесс ядра.
этой информацией я еще не знал )

зато собрал портом
Код:
MaNGOS/0.16.0 (* * Revision 9592 - *) for FreeBSD_x64 (little-endian) [world-daemon]
 Loading ScriptDev2 (for MaNGOS 9444+).
сейчас причешу его и выложу для экспериментов
Код:
gmake[1]: Leaving directory `/usr/local/MaNGOS/Posrts/mangos/work/mangos-9592/objdir'
===>   Running ldconfig
/sbin/ldconfig -m /usr/local/lib
===>   Registering installation for mangos-9592
вот так вот выглядят последние строчки make install
двое суток сидел, разбирался с опциями вот так вроде получается:

еще нужно сделать интерактивный выбор названия исполняемого файла(если серверов более двух - могут возникнуть проблемы с гашением процессов) и еще есть мулька - перевести на PostgreSQL базу
  Ответить с цитированием
Старый 03.05.2010, 15:16   #7
selector
Пользователь
 
Аватар для selector
 
Регистрация: 12.03.2010
Сообщений: 64
Сказал(а) спасибо: 23
Поблагодарили 10 раз(а) в 5 сообщениях
selector На верном пути
По умолчанию

Могу посоветовать отличную программку для авторестарта/отладки процесса сервера. Название - restartd
http://packages.ubuntu.com/ru/jaunty/restartd - для Убунту.
Для остальных систем можно поискать в гугле.

Скачиваем, устанавливаем, в файле конфига (/etc/restartd.conf) прописываем после объяснений нечто вида:
Код:
# Restartd configuration file

# Format:
#
# <process_name> <regexp> <action_if_not_running> <action_if_running>
#
# process_name: the name of the process which is just for logging
# as it does not affect for the regexp
#
# regexp: the POSIX regular expression for the command line of the
# process
#
# action_if_not_running: a script or program name to execute if the
# regexp does not match the full process command line
#
# action_if_running: a script or program name to execute if the regexp
# matches the full process command line

# Example:
#
# restartd ".*restartd" "/bin/echo 'It is not running!' >/tmp/restartd.out" "/bin/echo 'It is running!' >/tmp/restartd.out"

wotlk "mangos-wotlk" "ulimit -c unlimited; /opt/war/bin/mangos-worldd > /dev/null 2>&1 &" ""
wotlk "mangos-wotlk" - по желанию, как вы хотите назвать процесс

/opt/war/bin/mangos-worldd - путь куда вы установили сервер

Креш дампы будут складироваться в Корне "/" и будут иметь вид "core.xxxx"(где хххх - номер процесса когда мангос работал). Прочитать дамп вполне просто. В консоле вводим:
gdb /opt/war/bin/mangos-worldd -c /core.xxxx

далее bt либо bt full


Может быть это кому-то поможет.

Внимание для прочтения дампов вам потребуется пакет gdb который можно скачать командой apt-get install gdb(yum install gdb для Федоры).

-----------------------
Добавлено:

Запуск программы restartd можно осуществить выполнив команду ./usr/sbin/restartd (Для убунту) либо (./sbin/restartd для Федоры). Отключить программу просто - убить процесс с помощью kill id_процесса. Также возможно ее поставить как службу включив ее в /etc/init.d после этого старт/рестарт/остановка возможны командами service restartd start|restart|stop

Последний раз редактировалось selector; 03.05.2010 в 15:34. Причина: Добавлено описание
selector вне форума   Ответить с цитированием
Старый 10.05.2010, 20:52   #8
lina
Новичок
 
Аватар для lina
 
Регистрация: 29.04.2010
Сообщений: 11
Сказал(а) спасибо: 18
Поблагодарили 4 раз(а) в 2 сообщениях
lina На верном пути
По умолчанию

на счет первого поста (2.3) не понятно.

/proc/sys/fs/suid_dumpable.suid_dumpable=2
kernel.core_pattern="/var/log/dumps/%e.%p.core"

правильно ?
если да, то при перезагрузки sysctl лезут ошибки
lina вне форума   Ответить с цитированием
Старый 10.05.2010, 21:06   #9
CruncH
Пользователь
 
Регистрация: 07.03.2010
Адрес: Норильск
Сообщений: 51
Сказал(а) спасибо: 28
Поблагодарили 31 раз(а) в 15 сообщениях
Записей в дневнике: 3
CruncH На верном пути
Отправить сообщение для CruncH с помощью ICQ
По умолчанию

Цитата:
Сообщение от lina Посмотреть сообщение
на счет первого поста (2.3) не понятно.

/proc/sys/fs/suid_dumpable.suid_dumpable=2
kernel.core_pattern="/var/log/dumps/%e.%p.core"

правильно ?
если да, то при перезагрузки sysctl лезут ошибки
fs.suid_dumpable=2
Чуть внимательнее нада было...


PS: выделю тот пункт чуть лучше...
__________________
CruncH вне форума   Ответить с цитированием
Старый 10.05.2010, 21:13   #10
lina
Новичок
 
Аватар для lina
 
Регистрация: 29.04.2010
Сообщений: 11
Сказал(а) спасибо: 18
Поблагодарили 4 раз(а) в 2 сообщениях
lina На верном пути
По умолчанию

Цитата:
Сообщение от CruncH Посмотреть сообщение
fs.suid_dumpable=2
Чуть внимательнее нада было...


PS: выделю тот пункт чуть лучше...
спасибо) читал пару раз не заметил что выделенное слово было )

Последний раз редактировалось lina; 10.05.2010 в 21:17.
lina вне форума   Ответить с цитированием
Старый 15.05.2010, 12:34   #11
BonDit
Гость
 
Сообщений: n/a
По умолчанию

Цитата:
Сообщение от CruncH Посмотреть сообщение
Код:
kern.corefile=/home/cores/%U.%N.core
Чтобы изменения применились сразу выполняем следующие команды:
Код:
sysctl -w kern.corefile=/home/cores/%U.%N.core
Лучше сделать
Код:
kern.corefile=/home/cores/%P.%N.core
иначе дамп перезаписывается.
  Ответить с цитированием
Старый 20.05.2010, 18:49   #12
lina
Новичок
 
Аватар для lina
 
Регистрация: 29.04.2010
Сообщений: 11
Сказал(а) спасибо: 18
Поблагодарили 4 раз(а) в 2 сообщениях
lina На верном пути
По умолчанию

у меня вообще все кроме крашей сервера туда сбрасывается
например вылетел rar, кор файл создался показал bt
вылетел мангос, ничего не создаётся.
возможно это из за Скрина ?
lina вне форума   Ответить с цитированием
Старый 20.05.2010, 20:23   #13
CruncH
Пользователь
 
Регистрация: 07.03.2010
Адрес: Норильск
Сообщений: 51
Сказал(а) спасибо: 28
Поблагодарили 31 раз(а) в 15 сообщениях
Записей в дневнике: 3
CruncH На верном пути
Отправить сообщение для CruncH с помощью ICQ
По умолчанию

lina, нада смотреть скрипт который запускает mangos, и туда прописывать ulimit(я думаю в твоем случае screen запускает скрипт, который выполняет роль авторестартера, вот в него и нужно дописать ulimit), а разрешать делать дампы на всю систему неправильно, много мусора будет.

BonDit, ну я там еще с самого начала сделал сноску(там где еще для линя настройки идут) "смотри man core", фряхи под рукой нету, так что сказать ничего не могу как там точно. Тут есть + коре дампы не будут захламлять винт, а то иногда они достаточно тяжелые бывают.
__________________
CruncH вне форума   Ответить с цитированием
Старый 07.08.2010, 21:43   #14
Creed
Гость
 
Сообщений: n/a
По умолчанию

Сделал логи по описанию в 1м посте.
В дирекции папки: /var/log/dumps/ создаются нужные логи, например: mangos-worldd.1281186816.1878.core
Но их вес составляет 600-800 Мб. При этом сервер более 4х часов не работал. В чём может быть проблема?
  Ответить с цитированием
Старый 07.08.2010, 23:21   #15
tempura
Forum bot
 
Аватар для tempura
 
Регистрация: 01.02.2010
Адрес: пусто
Сообщений: 841
Сказал(а) спасибо: 286
Поблагодарили 418 раз(а) в 190 сообщениях
Записей в дневнике: 60
tempura отключил(а) отображение уровня репутации
По умолчанию

Цитата:
Сообщение от Creed Посмотреть сообщение
В дирекции папки...
Пять баллов.


По теме - например я (ни линуксоид не близко) подозреваю, что это полный дамп ядра на момент краша.

Может быть вам стоит использовать проприетарную, и более дружелюбную к пользователям, операционную систему?
__________________
Совершенно безопасен для людей, обладающих хотя бы некоторыми минимальными зачатками интеллекта, и способными строить причинно-следственные цепочки.
tempura вне форума   Ответить с цитированием
Старый 09.08.2010, 06:56   #16
rsa
Почетный флудер
Старожил
 
Аватар для rsa
 
Регистрация: 08.03.2010
Адрес: Мурманск, Россия
Сообщений: 788
Сказал(а) спасибо: 55
Поблагодарили 333 раз(а) в 151 сообщениях
Записей в дневнике: 1
rsa Как самоцвет среди гранитаrsa Как самоцвет среди гранитаrsa Как самоцвет среди гранитаrsa Как самоцвет среди гранита
По умолчанию

Цитата:
Сообщение от tempura Посмотреть сообщение
Пять баллов.


По теме - например я (ни линуксоид не близко) подозреваю, что это полный дамп ядра на момент краша.

Может быть вам стоит использовать проприетарную, и более дружелюбную к пользователям, операционную систему?
rsa вне форума   Ответить с цитированием
Старый 21.08.2010, 11:09   #17
KaraPUZ
Гость
 
Сообщений: n/a
По умолчанию

Цитата:
Сообщение от selector Посмотреть сообщение
Могу посоветовать отличную программку для авторестарта/отладки процесса сервера. Название - restartd
http://packages.ubuntu.com/ru/jaunty/restartd - для Убунту.
Для остальных систем можно поискать в гугле.

Скачиваем, устанавливаем, в файле конфига (/etc/restartd.conf) прописываем после объяснений нечто вида:
Код:
# Restartd configuration file

# Format:
#
# <process_name> <regexp> <action_if_not_running> <action_if_running>
#
# process_name: the name of the process which is just for logging
# as it does not affect for the regexp
#
# regexp: the POSIX regular expression for the command line of the
# process
#
# action_if_not_running: a script or program name to execute if the
# regexp does not match the full process command line
#
# action_if_running: a script or program name to execute if the regexp
# matches the full process command line

# Example:
#
# restartd ".*restartd" "/bin/echo 'It is not running!' >/tmp/restartd.out" "/bin/echo 'It is running!' >/tmp/restartd.out"

wotlk "mangos-wotlk" "ulimit -c unlimited; /opt/war/bin/mangos-worldd > /dev/null 2>&1 &" ""
wotlk "mangos-wotlk" - по желанию, как вы хотите назвать процесс

/opt/war/bin/mangos-worldd - путь куда вы установили сервер

Креш дампы будут складироваться в Корне "/" и будут иметь вид "core.xxxx"(где хххх - номер процесса когда мангос работал). Прочитать дамп вполне просто. В консоле вводим:
gdb /opt/war/bin/mangos-worldd -c /core.xxxx

далее bt либо bt full


Может быть это кому-то поможет.

Внимание для прочтения дампов вам потребуется пакет gdb который можно скачать командой apt-get install gdb(yum install gdb для Федоры).

-----------------------
Добавлено:

Запуск программы restartd можно осуществить выполнив команду ./usr/sbin/restartd (Для убунту) либо (./sbin/restartd для Федоры). Отключить программу просто - убить процесс с помощью kill id_процесса. Также возможно ее поставить как службу включив ее в /etc/init.d после этого старт/рестарт/остановка возможны командами service restartd start|restart|stop
Кто пробовал работать с этим пакетом ? Можно ли изменить пусть создания дампов ?

Цитата:
lina, нада смотреть скрипт который запускает mangos, и туда прописывать ulimit(я думаю в твоем случае screen запускает скрипт, который выполняет роль авторестартера, вот в него и нужно дописать ulimit), а разрешать делать дампы на всю систему неправильно, много мусора будет.
И где с рестартере мангоса на до менять на ulimit,если мой рестартер имеет такое содержание:
Код:
#!/bin/sh
while true ; do
servlog='/home/mangos/bin/Server.log';
outpatch='/home/mangos/bin/crash/';
date=`date "+%Y-%m-%d_%H:%M:%S"`;
echo "Server CRASHED !!! Start Bugreport System." >> $outpatch$date.txt;
echo "Server.log Log FILE Last 30 Lines:" >> $outpatch$date.txt;
cat $servlog | tail -n 30 >> $outpatch$date.txt;
echo "" >> $outpatch$date.txt;
echo "END bugtracker system." >> $outpatch$date.txt;
/home/mangos/bin/mangos-worldd
done

Последний раз редактировалось KaraPUZ; 21.08.2010 в 11:27.
  Ответить с цитированием
Ответ

Метки
core dump, crash dump, linux


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[fix][0.12] player dump Chipleo Принятые патчи 1 02.07.2010 15:18
Crash с инстами ice74 Баг-репорты 12 20.05.2010 12:11
[Crash?] удаление GO zergtmn Баг-репорты 0 29.04.2010 22:31
[crash] EffectScriptEffect Insider42 Баг-репорты 8 23.04.2010 12:49
Crash(game_event) selector Баг-репорты 9 19.04.2010 19:41


Текущее время: 08:30. Часовой пояс GMT +3.


ru-mangos.ru - Русское сообщество MaNGOS
Главная цель проекта MaNGOS - обучающая, поэтому разрешается использовать исходный код и собранную программу только для образовательных целей.
Вы не можете использовать MaNGOS в коммерческих целях, а также не разрешается устанавливать публичные серверы на базе MaNGOS.
Любое копирование материалов, информации в любом виде без указания источника - форума Ru-MaNGOS будет считаться нарушением авторских прав и нарушением Уголовного Кодекса РФ, ст. 146 ст. 147.
Перевод vBulletin: zCarot