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
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
Hello,
sounds useful for live monitoring - is it ok to include it in our repository, kind of in utils folder?
The last version is able to print the summary of allocated fragments, a matter of mem_summary value: http://www.kamailio.org/dokuwiki/doku.php/core-cookbook:3.1.x#mem_summary
Have you tried it?
Thanks, Daniel
On 12/1/10 4:05 PM, Jason Penton wrote:
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 http://memalyze.pl
Hope it helps
Cheers Jason
sr-dev mailing list sr-dev@lists.sip-router.org http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-dev
Hey Daniel,
On Thu, Dec 2, 2010 at 12:45 AM, Daniel-Constantin Mierla <miconda@gmail.com
wrote:
Hello,
sounds useful for live monitoring - is it ok to include it in our repository, kind of in utils folder?
No problem.
The last version is able to print the summary of allocated fragments, a matter of mem_summary value: http://www.kamailio.org/dokuwiki/doku.php/core-cookbook:3.1.x#mem_summary
Have you tried it?
I havent yet, I am still stuck on Kamailio 1.5 - as we have MANY custom changes to it, so porting to later versions is quite a task. BUT as you mentioned the one I did helps me because it is LIVE. I can therefore do certain activities and effectively monitor what is happening with my memory in a nice 'at-a-glance' manner.
p.s Please note the program I sent is obv. dependent on the format of the logfile because of the regex's in there.
Thanks, Daniel
On 12/1/10 4:05 PM, Jason Penton wrote:
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
sr-dev mailing listsr-dev@lists.sip-router.orghttp://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-dev
-- Daniel-Constantin Mierla Kamailio (OpenSER) Advanced Training Jan 24-26, 2011, Irvine, CA, USAhttp://www.asipto.com