[SNMP4J] Snmp object reuse.

Giuseppe Sarno giuseppe.sarno at genband.com
Tue Mar 8 23:18:57 CET 2011


Hello,
I seem to have memory issue using the code below. I seem to have a large number of snmp instances (almost 1 per message been sent).Same more the messageDispacherImpl.
I am wondering whether the snmp should be cached instead of created every single time. Is it enough to call snmp.close() ?   

Thanks.


-----Original Message-----
From: snmp4j-bounces at agentpp.org [mailto:snmp4j-bounces at agentpp.org] On Behalf Of Giuseppe Sarno
Sent: 02 March 2011 22:21
To: snmp4j at agentpp.org
Subject: [SNMP4J] Setting Local port in DefaultUdpTransport causes null responses.

Hello,
new to SNMP and to this API.
I am trying to use code snippet from http://www.snmp4j.org/doc/org/snmp4j/Snmp.html to build a SNMP manager that sends a SET between 2 nodes (SNMP4J 1.11.2).
I use Java executors to invoke the task that will actually perform the work. I noticed that this works ok if I don't set the LocalPort in the UDP transport.
I actually would like to fix the port to a specific value so I set it in the transport constructor. Unfortunately after this change the PDU response is always "null".
Messages are correctly sent and replied back (checked with wireshark). I am not too sure whether there is any threading issue as the transport is bound to a specific port or simply my code is not correct.
 
Can anybody please let me know if there is any problem with this approach and what the problme could be ?
 
Thanks.
 
 
The task will:
 
1)  Creates DefaultUdpTransportMapping (note I need to set the local port and I to add to set the option "reuse" to true as I was getting bind exception)
   
	DefaultUdpTransportMapping(new UdpAddress(InetAddress.getLocalHost(),localport),true);

2)  Creates community target.
    
    	CommunityTarget comtarget = new CommunityTarget();
    	comtarget.setCommunity(new OctetString(community));
    	comtarget.setVersion(snmpVersion);
   	comtarget.setAddress(new UdpAddress(ip + "/" + port));
    	comtarget.setRetries(0);
   	 comtarget.setTimeout(100);

3)  Creates a PDU
     
      PDU pdu = new PDU();
 
4) Creates SNMP with the UDP transport (above) 
    
	Snmp snmp = new Snmp(this.getUDPTransport());
 
5) Sends and wait for the resposne: 

	ResponseEvent response = snmp.set(pdu, comtarget);
	// Process Agent Response
	if (response != null)
	{
   		>> do work <<
	}
 
Excecutor that wraps the code above:
 
ExecutorService threadExecutor = Executors.newFixedThreadPool( Data.POOL ); for ( int i=1;i<=100000;i++) {  RunnableTask t = new RunnableTask(Integer.toString(i));
 threadExecutor.execute(t);
}
 threadExecutor.shutdown(); // shutdown worker threads } _______________________________________________
SNMP4J mailing list
SNMP4J at agentpp.org
http://lists.agentpp.org/mailman/listinfo/snmp4j



More information about the SNMP4J mailing list