[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