[Icecast-dev] Memory leak on Icecast 2.3.2 / Debian ?

Gilles PIETRI gilou at frequence3.fr
Tue Dec 8 02:08:33 PST 2009


Hi,

I've been noticing a huge memory usage on Icecast 2.3.2 on multiple 
debian instances. They are using like 100 MB after a day and going on 
until they hit like 1 GB.. So I ran one in valgrind, and killed it after 
~24h, here is the output:

==30481== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 38 from 3)
==30481== malloc/free: in use at exit: 44,448,584 bytes in 44,470 blocks.
==30481== malloc/free: 16,416,062 allocs, 16,371,592 frees, 
6,722,622,089 bytes allocated.
==30481== For counts of detected errors, rerun with: -v
==30481== searching for pointers to 44,470 not-freed blocks.
==30481== checked 468,248 bytes.
==30481==
==30481== 584 (104 direct, 480 indirect) bytes in 2 blocks are 
definitely lost in loss record 1 of 5
==30481==    at 0x4C2260E: malloc (vg_replace_malloc.c:207)
==30481==    by 0x618152F: (within /lib/libc-2.7.so)
==30481==    by 0x6181D06: __nss_database_lookup (in /lib/libc-2.7.so)
==30481==    by 0x918C31F: ???
==30481==    by 0x918D3D6: ???
==30481==    by 0x613FEA2: getpwnam_r (in /lib/libc-2.7.so)
==30481==    by 0x613F85F: getpwnam (in /lib/libc-2.7.so)
==30481==    by 0x4079FE: (within /usr/bin/icecast2)
==30481==    by 0x60C11A5: (below main) (in /lib/libc-2.7.so)
==30481==
==30481==
==30481== 3,000 bytes in 3 blocks are possibly lost in loss record 4 of 5
==30481==    at 0x4C2260E: malloc (vg_replace_malloc.c:207)
==30481==    by 0x5B5A007: xmlEncodeEntitiesReentrant (in 
/usr/lib/libxml2.so.2.6.32)
==30481==    by 0x40FB10: (within /usr/bin/icecast2)
==30481==    by 0x40FC01: (within /usr/bin/icecast2)
==30481==    by 0x41911C: (within /usr/bin/icecast2)
==30481==    by 0x41946D: (within /usr/bin/icecast2)
==30481==    by 0x40A5C1: (within /usr/bin/icecast2)
==30481==    by 0x42007C: (within /usr/bin/icecast2)
==30481==    by 0x5E8DFC6: start_thread (in /lib/libpthread-2.7.so)
==30481==    by 0x61725AC: clone (in /lib/libc-2.7.so)
==30481==
==30481==
==30481== 44,445,000 bytes in 44,445 blocks are definitely lost in loss 
record 5 of 5
==30481==    at 0x4C2260E: malloc (vg_replace_malloc.c:207)
==30481==    by 0x5B5A007: xmlEncodeEntitiesReentrant (in 
/usr/lib/libxml2.so.2.6.32)
==30481==    by 0x40FB10: (within /usr/bin/icecast2)
==30481==    by 0x40FC01: (within /usr/bin/icecast2)
==30481==    by 0x41911C: (within /usr/bin/icecast2)
==30481==    by 0x41946D: (within /usr/bin/icecast2)
==30481==    by 0x40A5C1: (within /usr/bin/icecast2)
==30481==    by 0x42007C: (within /usr/bin/icecast2)
==30481==    by 0x5E8DFC6: start_thread (in /lib/libpthread-2.7.so)
==30481==    by 0x61725AC: clone (in /lib/libc-2.7.so)
==30481==
==30481== LEAK SUMMARY:
==30481==    definitely lost: 44,445,104 bytes in 44,447 blocks.
==30481==    indirectly lost: 480 bytes in 20 blocks.
==30481==      possibly lost: 3,000 bytes in 3 blocks.
==30481==    still reachable: 0 bytes in 0 blocks.
==30481==         suppressed: 0 bytes in 0 blocks.

Funnily enough, I've been running one (almost forgotten) instance of 
Icecast 2.3.2-kh4 since september on a similar configuration, compiled 
from source, and I don't have this problem.

The valgrind output seems to indicate a leak in libxml2, I'm gonna try 
to see if this is linked to the way the icecast or libxml package is 
compiled/patched in debian, but I'm not too familiar with this kind of 
problems, so if you have something to say about this issue, I'd love to 
hear about it!

Regards,
Gilou



More information about the Icecast-dev mailing list