package org.simpleframework.demo.graph; import java.lang.management.ManagementFactory; import java.lang.management.MemoryMXBean; import java.lang.management.MemoryUsage; import java.lang.management.ThreadMXBean; import java.util.Set; import java.util.concurrent.CopyOnWriteArraySet; import org.apache.log4j.Logger; import org.simpleframework.http.socket.Session; import org.simpleframework.http.socket.FrameChannel; import org.simpleframework.http.socket.service.Service; public class GraphPlotter extends Thread implements Service { private static final Logger LOG = Logger.getLogger(GraphPlotter.class); private final Set<FrameChannel> sockets; public GraphPlotter() { this.sockets = new CopyOnWriteArraySet<FrameChannel>(); } public void connect(Session connection) { FrameChannel socket = connection.getChannel(); try { sockets.add(socket); } catch (Exception e) { LOG.info("Problem joining chat room", e); } } public void run() { while (true) { try { MemoryMXBean memory = ManagementFactory.getMemoryMXBean(); ThreadMXBean threads = ManagementFactory.getThreadMXBean(); MemoryUsage usage = memory.getHeapMemoryUsage(); long time = System.currentTimeMillis(); double count = threads.getThreadCount(); double max = usage.getMax(); double used = usage.getUsed(); double free = max - used; String heapUsedPoint = String.format("heapUsed:%s,%s", time, used); String heapFreePoint = String.format("heapFree:%s,%s", time, free); String threadCountPoint = String.format("threadCount:%s,%s", time, count); for (FrameChannel socket : sockets) { try { socket.send(heapUsedPoint); socket.send(heapFreePoint); socket.send(threadCountPoint); } catch (Exception e) { sockets.remove(socket); LOG.info("Problem sending point", e); } } Thread.sleep(50); } catch (Exception e) { LOG.info("Could not send point", e); } } } }