Hi All,
thought I would give you a small little perl program I quickly hacked up to
help with some memory leaks I was getting. Turns out I was forgetting to
call release_urecord after a get_urecord on the usrloc module. Because I use
Kamailio in DBOnly mode - the memory was never being freed. This little
program helped me to find the source in no time at all. I hope it helps you
too.
A little info:
The program works on the log file. NB you have to have memlog debugging
enabled for this program to do anything useful. Effectively the program
continuously monitors the log file looking for allocs and frees. It tallies
all the fragments in use and gives a report of all the fragments and where
they weer allocated. It also keeps a running counter of bytes used.
Here is an example of the output:
*****************************************************************************************************************************************************
DUMPING ALL UNFREED MEMORY FRAGMENTS (25)
*****************************************************************************************************************************************************
called from h_table.c: build_cell(251)
6 21312
called from dlg.c: new_dlg_uac(169) 1
128
called from t_msgbuilder.c: build_uac_req(921) 6
1896
called from pv_svar.c: set_var_value(104) 3
132
called from ../../ut.h: shm_str_dup(501)
2 48
called from reply.c: build_contact(127)
1 132
called from t_hooks.c: insert_tmcb(108) 6
144
************************************************************TOTAL BYTES HELD
IN FRAGMENTS:
23792***************************************************************
To use - simply untar into a directory and run ./memalyze.pl
Hope it helps
Cheers
Jason