diff options
author | Kevin P. Fleming <kpfleming@digium.com> | 2005-05-15 05:07:14 +0000 |
---|---|---|
committer | Kevin P. Fleming <kpfleming@digium.com> | 2005-05-15 05:07:14 +0000 |
commit | 99f890b746d5b5168950f783222ab86304cda0cd (patch) | |
tree | 34b6de6b9f74ecebd05c32465c92f6a8693f727d /contrib/scripts/ast_grab_core | |
parent | 3fbdf210ce0dab431eb42f0fef12014d2e28bc92 (diff) |
add script for grabbing core dump from running Asterisk process (bug #4174)
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@5671 65c4cc65-6c06-0410-ace0-fbb531ad65f3
Diffstat (limited to 'contrib/scripts/ast_grab_core')
-rwxr-xr-x | contrib/scripts/ast_grab_core | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/contrib/scripts/ast_grab_core b/contrib/scripts/ast_grab_core new file mode 100755 index 000000000..8f405ebdd --- /dev/null +++ b/contrib/scripts/ast_grab_core @@ -0,0 +1,64 @@ +#!/bin/sh +# $Id$ +# lame quickie script to snarf a core of a hung asterisk process. +# bugs to ast_grab_core, blinky-lights.org (derrick daugherty) + +DATE=`date +%Y%m%d%H%M` +DUMPDIR=/var/tmp +HOSTNAME=`hostname` +ADMINEMAIL="root@localhost" + +#the following should be improved +if [ -e /etc/asterisk/asterisk.conf ]; then + RUNDIR=`awk -F"=>" '/astrundir/ {print $2}' /etc/asterisk/asterisk.conf` + PID=`cat ${RUNDIR}/asterisk.pid` +elif [ -e /var/run/asterisk.pid ] ; then + PID=`cat /var/run/asterisk.pid` +else + echo Could not find an asterisk.conf definition for astrundir, using \'ps\' + echo to try and determine process ID. This is not reliable. + PID=`ps auxwf|grep asterisk|grep vv|head -1|awk '{print $2}'` +fi + +echo Snarfing asterisk core, this could take a few seconds depending +echo on how much memory is in use. +echo +echo \*\*\* WARNING \*\*\* If the system is not already locked this will cause the +echo \*\*\* WARNING \*\*\* process to STOP while memory is dumped to disk. +echo + +/usr/bin/gdb > /dev/null << EOF + attach ${PID} + gcore ${DUMPDIR}/asterisk_${DATE}.core.${PID} + detach + quit +EOF + +echo Snarfed! ${DUMPDIR}/asterisk_${DATE}.core.${PID} +echo + + +echo Trying for a backtrace of the captured core. +/usr/bin/gdb /usr/sbin/asterisk ${DUMPDIR}/asterisk_${DATE}.core.${PID} > /tmp/gdb_dump.${PID} 2> /dev/null << EOF +set prompt \n +echo --------------------------------------------------------------------------------\n +echo INFO THREAD +info thread +echo --------------------------------------------------------------------------------\n +echo THREAD APPLY ALL BT +thread apply all bt +echo --------------------------------------------------------------------------------\n +echo THREAD APPLY ALL BT FULL +thread apply all bt full +quit +EOF +echo Done trying for a bt. + + +echo Notifying admins of the core. +/usr/bin/mail -s "${HOSTNAME} core dumped at ${DUMPDIR}/asterisk_${DATE}.core.${PID}" ${ADMINEMAIL} < /tmp/gdb_dump.${PID} +/bin/rm /tmp/gdb_dump.${PID} +echo Done. +echo +echo Reproducible deadlocks should be posted with a full backtrace and instructions +echo to reproduce the issue at http://bugs.digium.com/ Thanks! |