Hi, I'm running RHEL 6.2 x86_64 (coming with net-snmp 5.5 branch) where snmpd is mostly used by HP ProLiant Support Pack components (hp-snmp-agents).
On one host I've found that snmpd is consuming a lot of memory - amount of which grows in time. After 24h it runs on ~3GB but I've seen 18GB if deamon has been left running for longer while. What is interesting is that on other hosts (same RHEL/net-snmp) I can't find same issue - usually snmpd running with ~300MB of memory for weeks. So what's special about given host? It's heaving 1700+ network interfaces up (mostly TUN/TAP). Valgrind confirm there's a leak here: ==2763== 939,072 bytes in 1,608 blocks are definitely lost in loss record 7,586 of 7,587 ==2763== at 0x4A04A28: calloc (vg_replace_malloc.c:467) ==2763== by 0x510535F: netsnmp_access_systemstats_entry_create (systemstats_common.c:170) ==2763== by 0x51072A1: _systemstats_v6_load_ifstats (systemstats_linux.c:649) ==2763== by 0x51082E9: netsnmp_access_systemstats_container_arch_load (systemstats_linux.c:678) ==2763== by 0x5106556: netsnmp_access_systemstats_container_load (systemstats_common.c:106) ==2763== by 0x50E73CA: ipIfStatsTable_container_load (ipIfStatsTable_data_access.c:316) ==2763== by 0x50E7781: ipIfStatsTable_container_init (ipIfStatsTable_data_access.c:128) ==2763== by 0x50E6C95: _ipIfStatsTable_initialize_interface (ipIfStatsTable_interface.c:1341) ==2763== by 0x50E50A1: init_ipIfStatsTable (ipIfStatsTable.c:54) ==2763== by 0x51B8304: init_mib_modules (mib_module_inits.h:23) ==2763== by 0x10BD11: main (snmpd.c:913) ==2763== ==2763== LEAK SUMMARY: ==2763== definitely lost: 939,145 bytes in 1,610 blocks ==2763== indirectly lost: 0 bytes in 0 blocks ==2763== possibly lost: 31,631 bytes in 113 blocks ==2763== still reachable: 6,655,449 bytes in 56,535 blocks ==2763== suppressed: 0 bytes in 0 blocks There's also a bit of usual complains on NSS/RPM but those are not ,,real'' issues. I've done a brief run around the code with shotdown_ as a primary target. Going down function calls there's following: /** * @internal * shutdown the container with functions or wrappers */ void _ipIfStatsTable_container_shutdown(ipIfStatsTable_interface_ctx * if_ctx) { DEBUGMSGTL(("internal:ipIfStatsTable:_ipIfStatsTable_container_shutdown", "called\n")); ipIfStatsTable_container_shutdown(if_ctx->container); _container_free(if_ctx->container); } /* _ipIfStatsTable_container_shutdown */ ipIfStatsTable_container_shutdown() basically is doing nothing ... well nothing that is interesting from leak point of view. _container_free() which should free allocated memory must fail somehow. It's using CONTAINER_CLEAR() with _container_item_free() as a callback. In general at the bottom we got: netsnmp_access_systemstats_entry_free(rowreq_ctx->data); rowreq_ctx->data = NULL; in ipIfStatsTable_rowreq_ctx_cleanup() that should do the work. That's all. If you see a clear place where leak happens, a patch would be welcome. I will try to dig this more. I can reproduce this with ,,vanilla'' net-snmp-5.5.2. Cheers, -Jacek ------------------------------------------------------------------------------ Master SQL Server Development, Administration, T-SQL, SSAS, SSIS, SSRS and more. Get SQL Server skills now (including 2012) with LearnDevNow - 200+ hours of step-by-step video tutorials by Microsoft MVPs and experts. SALE $99.99 this month only - learn more at: http://p.sf.net/sfu/learnmore_122512 _______________________________________________ Net-snmp-coders mailing list Net-snmp-coders@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/net-snmp-coders