[AGENT++] AgentX++ master agent memory usage for shared tables
cjsajdak at rockwellcollins.com
cjsajdak at rockwellcollins.com
Wed Oct 6 18:53:44 CEST 2010
Hi All,
I have a few questions about memory usage for the AgentX++ master agent
(master.cpp) when an AgentX++ subagent implements shared tables (such as
IF-MIB: if_mib.cpp and subagent.cpp).
Thanks,
Christopher Sajdak
[Question 1]: I noticed that the AgentX++ master agent seems to grow in
memory footprint each time I start/stop the subagent repeatedly. I have
been running the AgentX++ examples which I compiled on my RedHat linux
machine (agent++v3.5.30, snmp++v3.2.24, agentX++v1.4.17). I suspect that
add_row() may be involved, but not sure how the master agent would be
growing. Any ideas?
$ ps -F -p 5735
UID PID PPID C SZ RSS PSR STIME TTY TIME CMD
root 5735 27795 0 37137 4832 7 09:46 pts/17 00:00:00 ./master
$ ps -F -p 5735
UID PID PPID C SZ RSS PSR STIME TTY TIME CMD
root 5735 27795 0 37201 5144 7 09:46 pts/17 00:00:00 ./master
$ ps -F -p 5735
UID PID PPID C SZ RSS PSR STIME TTY TIME CMD
root 5735 27795 0 37265 5396 7 09:46 pts/17 00:00:00 ./master
$ ps -F -p 5735
UID PID PPID C SZ RSS PSR STIME TTY TIME CMD
root 5735 27795 0 37265 5400 7 09:46 pts/17 00:00:00 ./master
$
Example files mentioned:
agentpp/agentX++/examples/master/src/master.cpp
agentpp/agentX++/examples/subagent/src/subagent.cpp
agentpp/agentX++/examples/subagent/src/if_mib.cpp
NOTE:I modified the main loop in the subagent.cpp example to allow for a
reconnection to the master agent. This allows me to stop and restart the
master agent as well. See the code snippet here:
// Replace the main loop in
agentpp/agentX++/examples/subagent/src/subagent.cpp with this:
// Main Loop
Request* req;
int retries;
do
{
while ((run) && (!mib->get_agentx()->quit()))
{
req = reqList->receive(40000);
if (req)
{
mib->process_request(req);
}
else
{
mib->cleanup();
}
}
mib->save_all(); // save persistent data to disk
retries = 0;
// Try to reconnect 10 times every 10 seconds
while ((run) && (retries++ < 10) && (!mib->init()))
{
printf("Sleep for 10 sec during retry... \n");
sleep(10);
}
}
while ((run) && (retries < 10)); // stop after 10 consecutive failures
[Question 2]: I have noticed when I try to use allocate_index() or
init_row() for a shared table with multiple indices ("1.1", "1.2", "1.3",
"2.1", "2.2", "2.3"), I get these errors (259 and 260) on some of the
entries. Any tips?
./agentx_pp/agentx_def.h:#define AGENTX_INDEX_ALREADY_ALLOCATED 259
./agentx_pp/agentx_def.h:#define AGENTX_DUPLICATE_REGISTRATION 263
allocate_index() ok on "1.1" and "2.2"
allocate_index() fails on "1.2", "1.3", "1.4", "2.1", "2.3", "2.4"
init_row() ok on "1.1" and "2.2"
init_row() fails on "1.2", "1.3", "1.4", "2.1", "2.3", "2.4"
(BTW, I noticed a thread:
http://lists.agentpp.org/pipermail/agentpp/2008-January/004210.html that
might be the same thing I am facing).
Meanwhile these would all be handled by add_row(), but I think the master
agent is consuming extra memory in the process.
[Question 3]: When running the AgentX++ example subagent.cpp (implements
IF-MIB), I see that there are several entries for each index. (see
IF-MIB::ifIndex output from snmpwalk below). What is the purpose of these
entries? Are they needed or can they be omitted somehow?
$ snmpwalk -v3 -uunsecureUser localhost:4700 | grep IF-MIB
IF-MIB::ifNumber.0 = INTEGER: 13
IF-MIB::ifType.1 = INTEGER: softwareLoopback(24)
IF-MIB::ifType.2 = INTEGER: ethernetCsmacd(6)
IF-MIB::ifType.3 = INTEGER: ethernetCsmacd(6)
(snip)
IF-MIB::ifOutErrors.11 = Counter32: 0
IF-MIB::ifOutErrors.12 = Counter32: 0
IF-MIB::ifOutErrors.13 = Counter32: 0
SNMPv2-SMI::mib-2.74.1.4.2.1.3.2.2.118 = OID: IF-MIB::interfaces <---
(AGENTX-MIB::agentxRegStart = .1.3.6.1.2.1.74.1.4.2.1.3)
SNMPv2-SMI::mib-2.74.1.4.2.1.3.2.2.131 = OID: IF-MIB::ifIndex.1 <---
are these entries added for each shared table index allocated?
SNMPv2-SMI::mib-2.74.1.4.2.1.3.2.2.138 = OID: IF-MIB::ifIndex.2
SNMPv2-SMI::mib-2.74.1.4.2.1.3.2.2.139 = OID: IF-MIB::ifIndex.6
SNMPv2-SMI::mib-2.74.1.4.2.1.3.2.2.141 = OID: IF-MIB::ifIndex.5
SNMPv2-SMI::mib-2.74.1.4.2.1.3.2.2.152 = OID: IF-MIB::ifIndex.7
SNMPv2-SMI::mib-2.74.1.4.2.1.3.2.2.158 = OID: IF-MIB::ifIndex.10
SNMPv2-SMI::mib-2.74.1.4.2.1.3.2.2.192 = OID: IF-MIB::ifIndex.8
SNMPv2-SMI::mib-2.74.1.4.2.1.3.2.2.204 = OID: IF-MIB::ifIndex.3
SNMPv2-SMI::mib-2.74.1.4.2.1.3.2.2.208 = OID: IF-MIB::ifIndex.9
SNMPv2-SMI::mib-2.74.1.4.2.1.3.2.2.217 = OID: IF-MIB::ifIndex.11
SNMPv2-SMI::mib-2.74.1.4.2.1.3.2.2.220 = OID: IF-MIB::ifIndex.4
SNMPv2-SMI::mib-2.74.1.4.2.1.3.2.2.221 = OID: IF-MIB::ifIndex.12
SNMPv2-SMI::mib-2.74.1.4.2.1.3.2.2.223 = OID: IF-MIB::ifIndex.13
Now I stop the master agent and then restart it, I see that the
IF-MIB::ifIndex entries are no longer there. Could these be contributing
to master agent memory overhead?
$ snmpwalk -v3 -uunsecureUser localhost:4700 | grep IF-MIB
IF-MIB::ifNumber.0 = INTEGER: 13
IF-MIB::ifType.1 = INTEGER: softwareLoopback(24)
IF-MIB::ifType.2 = INTEGER: ethernetCsmacd(6)
IF-MIB::ifType.3 = INTEGER: ethernetCsmacd(6)
(snip)
IF-MIB::ifOutErrors.11 = Counter32: 0
IF-MIB::ifOutErrors.12 = Counter32: 0
IF-MIB::ifOutErrors.13 = Counter32: 0
SNMPv2-SMI::mib-2.74.1.4.2.1.3.1.1.1 = OID: IF-MIB::interfaces <--
this time I don't see IF-MIB::ifIndex entries after master agent restart
[cjsajdak at flexnetlab_backup ~]$
More information about the AGENTPP
mailing list