[SNMP4J] Memory leak
Rejean Chiragh
chiragh.rejean at gmail.com
Mon Jan 9 17:02:56 CET 2006
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!
More information about the SNMP4J
mailing list