[SNMP4J] Memory leak
Rejean Chiragh
chiragh.rejean at gmail.com
Mon Jan 9 20:18:01 CET 2006
Thanks, it seem to have fix my problem!
On 1/9/06, Frank Fock <fock at agentpp.com> wrote:
>
> Hi Rejean,
>
> You have to call Snmp.close() to free your resources.
> It is probably more efficient to use a single Snmp instance for
> several servlet instances in order to avoid thread and port
> creation (binding).
>
> Best regards,
> Frank
>
> Rejean Chiragh wrote:
>
> >Hi to all,
> >
> >I am using snmp4j and am having problems, there seems to be a memory leak
> >tomcat crashed after a fiew refresh of the jsp page, everytime I call the
> >page, It consumes 3 meg more of RAM in the tomcat process.
> >
> >Here is my code:
> >
> >
> >package cop;
> >
> >import java.io.IOException;
> >import java.util.Vector;
> >
> >import javax.servlet.jsp.JspWriter;
> >
> >import org.apache.log4j.Level;
> >import org.apache.log4j.Logger;
> >import org.snmp4j.CommunityTarget;
> >import org.snmp4j.PDU;
> >import org.snmp4j.Snmp;
> >import org.snmp4j.TransportMapping;
> >import org.snmp4j.event.ResponseEvent ;
> >import org.snmp4j.mp.SnmpConstants;
> >import org.snmp4j.smi.Address;
> >import org.snmp4j.smi.GenericAddress;
> >import org.snmp4j.smi.OID;
> >import org.snmp4j.smi.OctetString;
> >import org.snmp4j.smi.VariableBinding ;
> >import org.snmp4j.transport.DefaultUdpTransportMapping;
> >
> >
> >public class Get
> >{
> > public Get()
> > {
> > Logger.getRootLogger().setLevel(Level.OFF);
> > }
> > public void go(String serveur, final JspWriter out) throws Exception
> > {
> > OctetString community = new OctetString("public");
> > Address targetAddress = GenericAddress.parse("udp:"+serveur+"/161");
> > TransportMapping transport = new DefaultUdpTransportMapping();
> > transport.listen();
> > // setting up target
> > CommunityTarget target = new CommunityTarget();
> > target.setCommunity(community);
> > target.setVersion(SnmpConstants.version2c);
> > target.setAddress(targetAddress);
> > target.setRetries (1);
> > target.setTimeout(1500);
> > // creating PDU
> > PDU requestPDU = new PDU();
> > PDU response;
> >
> > //SNMPv2-MIB sysDescr 1.3.6.1.2.1.1.1.0
> > requestPDU.add(new VariableBinding(new OID(new int[]
> >{1,3,6,1,2,1,1,5})));
> > requestPDU.add(new VariableBinding(new OID(new int[]
> >{1,3,6,1,2,1,1,1})));
> > requestPDU.add(new VariableBinding(new OID(new int[]
> >{1,3,6,1,4,1,232,11,2,2,1})));
> > requestPDU.add(new VariableBinding(new OID(new int[]
> >{1,3,6,1,4,1,232,2,2,2,1})));
> > requestPDU.add(new VariableBinding(new OID(new int[]
> >{1,3,6,1,4,1,232,2,2,4,2})));
> > requestPDU.add(new VariableBinding(new OID(new int[]
> >{1,3,6,1,2,1,4,20,1,1})));
> > requestPDU.add(new VariableBinding(new OID(new int[]
> >{1,3,6,1,2,1,1,3})));
> > //requestPDU.add(new VariableBinding(new OID(mibObject)));
> > requestPDU.setType(PDU.GETNEXT);
> > Snmp snmp = new Snmp(transport);
> > // sending request
> > ResponseEvent event = snmp.send(requestPDU, target);
> > response = event.getResponse();
> > if (response == null){
> > System.out.println("Erreur lors de la requete SNMP pour le
> serveur
> >"+serveur+".");
> > return;
> > }
> > printVarBinds(response.getVariableBindings(), out);
> > ((Snmp)event.getSource()).cancel(event.getRequest(),null);
> > System.gc();
> > }
> >
> > private void printVarBinds(Vector varbinds, JspWriter out)
> > {
> > try {
> > out.println("<tr>");
> > } catch (IOException e1) {
> > // TODO Auto-generated catch block
> > e1.printStackTrace();
> > }
> >
> > for(int i=0; i < varbinds.size (); i++)
> > {
> > try {
> > //out.println("\tvarbind[" + i + "] = " + varbinds.get(i));
> > String OID = varbinds.get(i).toString().split("=")[0];
> > String resultat = varbinds.get(i).toString().split("=")[1];
> >
> > out.println("<td bgcolor=EDEFF1 title='"+resultat+"'>"+(
> >resultat.length()>30 ? resultat.substring(0,30): resultat)+"</td>");
> > //out.println("<tr><td>" + varbinds.get(i)+"</td></tr>");
> >
> > } catch (IOException e) {
> > // TODO Auto-generated catch block
> > e.printStackTrace ();
> > }
> > }
> > try {
> > out.println("</tr>");
> > } catch (IOException e) {
> > // TODO Auto-generated catch block
> > e.printStackTrace();
> > }
> > }
> >}
> >
> >
> >
> >
> >
> >Here is my jsp page :
> >
> ><%@ page import="cop.*" %>
> ><%@ page import="java.net.*"%>
> >
> ><jsp:useBean id="Get" scope="page" class="cop.Get" />
> ><html>
> ><title>Liste des serveurs POP</title>
> ><head>
> ><style type="text/css"><!--
> >FONT {color:white;
> > background-color:003366}
> >--></style>
> ><link href="./css/sortabletable.css" rel="stylesheet" type="text/css" />
> ><script language="javascript" src="./js/sortabletable.js"></script>
> ></head>
> ><body>
> ><table>
> ><tr><td colspan=6 bgcolor=003366><font color=FFFFFF size=5>Liste des
> >serveurs COP</font></td></tr>
> ><tr>
> ><td>
> ><table border=1 id=serveurCOP class="sort-table">
> ><thead>
> ><tr bgcolor=003366><td bgcolor=67A5D8 width='140'>Nom du serveur</td><td
> >bgcolor=67A5D8 width='180'>Description</td><td bgcolor=67A5D8
> >width='160'>OS</td><td bgcolor=67A5D8 width='80'>No série</td><td
> >bgcolor=67A5D8 width='170'>Modèle</td><td bgcolor=67A5D8
> width='80'>Adresse
> >IP</td><td bgcolor=67A5D8 width='120'>Uptime</td></tr>
> ></thead>
> ><tbody>
> ><%
> > Get snmpget = new Get();
> > String[] serveurCOP =
>
> >{"copctx0","copctx1","copctx2","copctx3","copctx4","copctx5","copsmp0","copsmp1","copcom0","copcom1","copcom2","copcom3","copmod","copfic0","copfic1","copdom0","copdom1","copemp0","copemp1","copemp2","copemp3","coppds","copweb0","copweb1","cop0poc","cop1poc","copscm0","copora0","copora1","copora2","copora3","copbck0","copbck1"};
> >
> > /*
> > String copctx0 = "10.1.103.90";
> > int[] name = {1,3,6,1,2,1,1,5,0};
> > int[] desc = {1,3,6,1,2,1,1,1,0};
> > int[] uptime = {1,3,6,1,2,1,1,3,0};
> > int[] serialNumber = {1,3,6,1,4,1,232,2,2,2,1,0};
> > int[] model = {1,3,6,1,4,1,232,2,2,4,2,0};
> > int[] adresseIp = {1,3,6,1,2,1,4,20,1,1,0};
> > */
> > for (int i=0;i<serveurCOP.length;i++)
> > {
> > snmpget.go(serveurCOP[i],out);
> > }
> >%>
> ></tbody>
> ></table>
> ></td>
> ></tr>
> ><tr><td colspan=6 bgcolor=003366><font color=FFFFFF size=5>Liste des
> >serveurs PQDH</font></td></tr>
> ><tr>
> ><td>
> ><table border=1 id=serveurPQDH class="sort-table">
> ><thead>
> ><tr bgcolor=003366><td bgcolor=67A5D8 width='140'>Nom du serveur</td><td
> >bgcolor=67A5D8 width='180'>Description</td><td bgcolor=67A5D8
> >width='160'>OS</td><td bgcolor=67A5D8 width='80'>No série</td><td
> >bgcolor=67A5D8 width='170'>Modèle</td><td bgcolor=67A5D8
> width='80'>Adresse
> >IP</td><td bgcolor=67A5D8 width='120'>Uptime</td></tr>
> ></thead>
> ><tbody>
> ><%
> > String[] serveurPQDH =
>
> >{"spdaspan","spdaspandex","serveurpdaprod","serveurpdaprepr","serveurpdadev"};
> > /*
> > String copctx0 = " 10.1.103.90";
> > int[] name = {1,3,6,1,2,1,1,5,0};
> > int[] desc = {1,3,6,1,2,1,1,1,0};
> > int[] uptime = {1,3,6,1,2,1,1,3,0};
> > int[] serialNumber = {1,3,6,1,4,1,232,2,2,2,1,0};
> > int[] model = {1,3,6,1,4,1,232,2,2,4,2,0};
> > int[] adresseIp = {1,3,6,1,2,1,4,20,1,1,0};
> > */
> > for (int i=0;i<serveurPQDH.length;i++)
> > {
> > snmpget.go(serveurPQDH[i],out);
> > }
> >%>
> ></tbody>
> ></table>
> ></td>
> ></tr>
> ><tr><td colspan=6 bgcolor=003366><font color=FFFFFF size=5>Liste des
> >serveurs SPA</font></td></tr>
> ><tr>
> ><td>
> ><table border=1 id=serveurSPA class="sort-table">
> ><thead>
> ><tr bgcolor=003366><td bgcolor=67A5D8 width='140'>Nom du serveur</td><td
> >bgcolor=67A5D8 width='180'>Description</td><td bgcolor=67A5D8
> >width='160'>OS</td><td bgcolor=67A5D8 width='80'>No série</td><td
> >bgcolor=67A5D8 width='170'>Modèle</td><td bgcolor=67A5D8
> width='80'>Adresse
> >IP</td><td bgcolor=67A5D8 width='120'>Uptime</td></tr>
> ></thead>
> ><tbody>
> ><%
> > String[] serveurSPA = {"spamod0","spamod1","spamodd"};
> > /*
> > String copctx0 = "10.1.103.90";
> > int[] name = {1,3,6,1,2,1,1,5,0};
> > int[] desc = {1,3,6,1,2,1,1,1,0};
> > int[] uptime = {1,3,6,1,2,1,1,3,0};
> > int[] serialNumber = {1,3,6,1,4,1,232,2,2,2,1,0};
> > int[] model = {1,3,6,1,4,1,232,2,2,4,2,0};
> > int[] adresseIp = {1,3,6,1,2,1,4,20,1,1,0};
> > */
> > for (int i=0;i<serveurSPA.length;i++)
> > {
> > snmpget.go(serveurSPA[i],out);
> > }
> >%>
> ></tbody>
> ></table>
> ></td>
> ></tr>
> ></table>
> >Information en provenance du serveur web : <%=InetAddress.getLocalHost
> >().getHostName()%>
> ><script language="javascript">
> >var serveurCOP = new SortableTable(document.getElementById("serveurCOP"),
>
> >["CaseInsensitiveString","CaseInsensitiveString","CaseInsensitiveString","CaseInsensitiveString","CaseInsensitiveString","CaseInsensitiveString"]);
> >
> >var serveurPQDH = new SortableTable(document.getElementById
> ("serveurPQDH"),
>
> >["CaseInsensitiveString","CaseInsensitiveString","CaseInsensitiveString","CaseInsensitiveString","CaseInsensitiveString","CaseInsensitiveString"]);
> >
> >var serveurSPA = new SortableTable(document.getElementById("serveurSPA"),
>
> >["CaseInsensitiveString","CaseInsensitiveString","CaseInsensitiveString","CaseInsensitiveString","CaseInsensitiveString","CaseInsensitiveString"]);
> >
> ></script>
> >
> ></body>
> >
> ></html>
> >
> >
> >Thanks!
> >_______________________________________________
> >SNMP4J mailing list
> >SNMP4J at agentpp.org
> >http://lists.agentpp.org/mailman/listinfo/snmp4j
> >
> >
> >
> >
>
>
> --
> AGENT++
> http://www.agentpp.com
> http://www.mibexplorer.com
> http://www.mibdesigner.com
>
>
>
More information about the SNMP4J
mailing list