Files
oracle/vdh/heapdump_dissect_ksh

76 lines
3.3 KiB
Plaintext
Raw Normal View History

2026-03-12 21:23:47 +01:00
#!/bin/ksh
################################################################################
##
## File name: heapdump_dissect
## Purpose: Dissecting heapdump
##
## Author: Riyaj Shamsudeen
## Copyright: GNU public license
##
## Uage 2) run ./heapdump_dissect <heapdump tracefile name>
## For example: ./heapdump_dissect ORCL_ora_4345.trc
##
## Other: Only take heapdumps when you know what you're doing!
## Taking a heapdump on shared pool (when bit 2 in heapdump event
## level is enabled) can hang your database for a while as it
## holds shared pool latches for a long time if your shared pool
## is big and heavily active.
##
## Thanks to: Tanel Poder for his original tool heapdump_analyzer
##
##
################################################################################
echo
echo " -- Heapdump dissect v1.00 by Riyaj Shamsudeen"
echo " -- Based upon Tanel's script heapdump_analyzer http://www.tanelpoder.com/files/scripts/heapdump_analyzer "
echo
echo " This script creates two files in /tmp/ directory "
echo " 1. /tmp/heapdump_dissect.lst - temporary file "
echo " 2. /tmp/heapdump_summary.lst - heap dump summary "
cat $1 | awk '
/^HEAP DUMP heap name=/ { split($0,ht,"\""); HTYPE=ht[2]; doPrintOut = 1; }
/^EXTENT/ { EXT=$1" " $2; }
/Chunk/{ if ( doPrintOut == 1 ) {
split($0,sf,"\"");
printf "%16s| %16s| %16s| %16s| %10d\n", HTYPE, EXT, $5, sf[2], $4;
}
}
/Total heap size/ {
printf "%10d , %16s, %16s, %16s\n", $5, HTYPE, "TOTAL", "Total heap size";
doPrintOut=0;
}
' |grep EXTENT|sort >/tmp/heapdump_dissect.lst
echo "Sub heap/type summary " > /tmp/heapdump_summary.lst
echo "----------------------" >>/tmp/heapdump_summary.lst
echo "Sub heap Type Size" >>/tmp/heapdump_summary.lst
echo "---------------- ----------------- ---------" >>/tmp/heapdump_summary.lst
cat /tmp/heapdump_dissect.lst | grep EXTENT|awk '
BEGIN { FS="|"}
{ SizeOfElem [ $1 " " $3 ]+=$5;}
END { for ( i in SizeOfElem ) { print i " " SizeOfElem [i]; } }
'|sort >> /tmp/heapdump_summary.lst
echo "Sub heap level summary " >> /tmp/heapdump_summary.lst
echo "----------------------" >>/tmp/heapdump_summary.lst
echo "Sub heap Type Allocation cmt Size" >>/tmp/heapdump_summary.lst
echo "---------------- ----------------- --------------- --------" >>/tmp/heapdump_summary.lst
cat /tmp/heapdump_dissect.lst | grep EXTENT|awk '
BEGIN { FS="|"}
{ SizeOfElem [ $1 " " $3 " " $4 ]+=$5;}
END { for ( i in SizeOfElem ) { print i " " SizeOfElem [i]; } }
'|sort >> /tmp/heapdump_summary.lst
echo "Extent level summary " >> /tmp/heapdump_summary.lst
echo "------------------ " >> /tmp/heapdump_summary.lst
echo "Sub heap Extent Type Allocation cmt Size" >>/tmp/heapdump_summary.lst
echo "---------------- ----------------- --------------- -------------- --------" >>/tmp/heapdump_summary.lst
cat /tmp/heapdump_dissect.lst | awk '
BEGIN { FS="|"}
{ SizeOfElem [ $1 " " $2 " " $3 " " $4 ]+=$5;}
END { for ( i in SizeOfElem ) { print i " " SizeOfElem [i]; } }
'|sort >> /tmp/heapdump_summary.lst
echo