[SNMP4J] Memory Leak 1.5?
glen
glen at cumming66.freeserve.co.uk
Tue May 10 10:14:18 CEST 2005
Hi,
Using the 1.5 version of the snmp library - just doing simple test to
see how things work (don't know much about SNMP yet). Using some code I
found on this mail archive I knocked up a quick test agent which sends
back a string to any get request. However when I run the code despite it
doing effectively nothing the memory usage just keeps on increasing
until the jvm runs out of memory (note memory starts leaking as soon as
the code is run without having received any messages).
Is there something I have missed or is there an issue with this version
of the library?
Using IBM jvm, details:
Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.1)
Classic VM (build 1.4.1, J2RE 1.4.1 IBM build cxia321411-20030930 (JIT
enabled: jitc))
Cheers,
Glen
The code I used is as follows :
import java.util.*;
import org.snmp4j.*;
import org.snmp4j.smi.*;
public class testsnmp
{
public static class Handler implements org.snmp4j.CommandResponder
{
protected java.lang.String mAddress = null;
protected int mPort = 0;
protected java.lang.String mMyCommunityName = null;
protected org.snmp4j.TransportMapping mServerSocket = null;
protected org.snmp4j.Snmp mSNMP = null;
public Handler()
{
}
public void configure()
{
mAddress = "10.12.141.16";
mPort = 161;
mMyCommunityName = "test";
}
public void start()
{
try
{
mServerSocket = new
org.snmp4j.transport.DefaultUdpTransportMapping(new
org.snmp4j.smi.UdpAddress(java.net.InetAddress.getByName(mAddress),
mPort));
mSNMP = new org.snmp4j.Snmp(mServerSocket);
mSNMP.addCommandResponder(this);
mServerSocket.listen();
}
catch (java.net.UnknownHostException vException)
{
System.out.println(vException);
}
catch (java.io.IOException vException)
{
System.out.println(vException);
}
}
public synchronized void
processPdu(org.snmp4j.CommandResponderEvent aEvent)
{
java.lang.String vCommunityName = new
java.lang.String(aEvent.getSecurityName());
System.out.println("Community name " +
vCommunityName);
org.snmp4j.PDU vPDU = aEvent.getPDU();
if (vPDU == null)
{
System.out.println("Null pdu");
}
else
{
System.out.println("(rcv) " +
vPDU.toString());
switch (vPDU.getType())
{
case org.snmp4j.PDU.GET:
case org.snmp4j.PDU.GETNEXT:
break;
}
org.snmp4j.mp.StatusInformation
statusInformation = new org.snmp4j.mp.StatusInformation();
org.snmp4j.mp.StateReference ref =
aEvent.getStateReference();
try
{
System.out.println("Sending
response");
vPDU.setType(PDU.RESPONSE);
vPDU.set( 0, new VariableBinding(
vPDU.get(0).getOid(), new OctetString("Test") ) );
aEvent.getMessageDispatcher().returnResponsePdu(aEvent.getMessageProcessingModel(),
aEvent.getSecurityModel(), aEvent.getSecurityName(),
aEvent.getSecurityLevel(), vPDU, aEvent.getMaxSizeResponsePDU(), ref,
statusInformation);
}
catch (org.snmp4j.MessageException
vException)
{
System.out.println(vException);
}
}
}
}
public static void main(String argv[])
{
Handler h = new Handler();
h.configure();
h.start();
/** Do nothing loop **/
while( true )
{
synchronized(testsnmp.class)
{
try
{
testsnmp.class.wait();
}
catch( Exception e )
{
}
}
}
}
}
More information about the SNMP4J
mailing list