Hi,
I wrote this sample code and the resident memory of the process is
increasing gradually over time. What could be the reason ? I don't see any
obvious leaks in my program. Could it be that the API is not
freeing/deleting memory ?
Regards,
Navin
package ovcollector;
import java.util.*;
import java.io.*;
import java.lang.management.ManagementFactory;
import org.apache.http.client.*;
import org.apache.http.params.*;
import org.ovirt.engine.sdk.Api;
import org.apache.http.pool.*;
import org.ovirt.engine.sdk.decorators.Host;
import org.ovirt.engine.sdk.decorators.HostStatistic;
import org.ovirt.engine.sdk.decorators.StorageDomain;
import org.ovirt.engine.sdk.decorators.VM;
import org.ovirt.engine.sdk.decorators.VMDisk;
import org.ovirt.engine.sdk.decorators.VMDiskStatistic;
import org.ovirt.engine.sdk.decorators.VMStatistic;
import org.ovirt.engine.sdk.decorators.VMs;
import org.ovirt.engine.sdk.entities.CPU;
import org.ovirt.engine.sdk.entities.Value;
import org.ovirt.engine.sdk.exceptions.ServerException;
import org.ovirt.engine.sdk.exceptions.UnsecuredConnectionAttemptError;
import org.ovirt.engine.*;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
public class collectHosts extends JPanel {
/**
* @param args
*/
public static String[] columnNames = {"Host Name",
"Host uuid",
"Cpu Cores", "Cpu Sockets",
"Memory.total",
"Memory.used",
"Memory.free",
"Memory.shared","Memory.buffers","Memory.cached","swap.total","swap.free","swap.used","swap.cached","ksm.cpu.current",
"cpu.current.user","cpu.current.system","cpu.current.idle","cpu.load.avg.5m"
};
public static Object[][] data =
{
{"blankvmname", "blankuuid", new Double(0),new Double(0),new
Double(0),new
Double(0),new Double(0),new Double(0),new Double(0), new Double(0),
new Double(0),new Double(0),new Double(0),new Double(0),new Double(0),new
Double(0),new Double(0),new Double(0),new Double(0)},
{"blankvmname", "blankuuid", new Double(0),new Double(0),new
Double(0),new
Double(0),new Double(0),new Double(0),new Double(0), new Double(0),
new Double(0),new Double(0),new Double(0),new Double(0),new Double(0),new
Double(0),new Double(0),new Double(0),new Double(0)}
};
public collectHosts() {
super(new GridLayout(1,0));
final JTable table = new JTable(data, columnNames);
table.setPreferredScrollableViewportSize(new Dimension(500, 70));
table.setFillsViewportHeight(true);
//Create the scroll pane and add the table to it.
JScrollPane scrollPane = new JScrollPane(table);
//Add the scroll pane to this panel.
add(scrollPane);
}
/**
* Create the GUI and show it. For thread safety,
* this method should be invoked from the
* event-dispatching thread.
*/
private static void createAndShowGUI() {
//Create and set up the window.
JFrame frame = new JFrame("Hosts");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//Create and set up the content pane.
collectHosts newContentPane = new collectHosts();
newContentPane.setOpaque(true); //content panes must be opaque
frame.setContentPane(newContentPane);
//Display the window.
frame.pack();
frame.setVisible(true);
}
private static final String URL = "http://somehost:80/api";
public static void main(String[] args) throws
ClientProtocolException,ServerException,
UnsecuredConnectionAttemptError,IOException {
// TODO Auto-generated method stub
System.out.println("Hosts");
while (true)
{
Api api = new Api(URL,"SOMEUSERNAME","SOMEPASSWORD");
System.out.println(ManagementFactory.getRuntimeMXBean().getName()) ;
List<Host> hlist = api.getHosts().list();
Integer i=0,j=0;
for(Host obj: hlist)
{
j=0;
System.out.println(obj.getName()+ ":" + obj.getId() +":"+
obj.getMemory()+":" + obj.getCpu().getTopology().getCores() +":"+
obj.getCpu().getTopology().getSockets());
data[i][j++]=obj.getName();
data[i][j++]=obj.getId();
data[i][j++]=obj.getCpu().getTopology().getCores();
data[i][j++]=obj.getCpu().getTopology().getSockets();
List<HostStatistic> lhs=obj.getStatistics().list();
for(HostStatistic obj1: lhs)
{
System.out.println(obj1.getName());
List<Value> vll=obj1.getValues().getValues();
for(Value vl:vll)
{
System.out.println(vl.getDatum());
data[i][j++]=vl.getDatum();
}
}
i++;
}
try {
Thread.sleep(10000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/*
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGUI();
}
});
List<StorageDomain> list_SD=api.getStorageDomains().list();
Integer i=0;
for(StorageDomain obj: list_SD)
{
System.out.println(obj.getName()+ " | " + obj.getUsed() + " | " +
obj.getAvailable() + " | " + obj.getType());
}
*/
}
}