JSP para ver Hilos ejecutándose en un Servidor J2EE

Continuando con el tema de la monitorización y con el copia-pega:

Ahí va una JSP copia-pega (sin clases importadas ni nada) que permite ver que está ejecutando cada hilo que se ejecuta en un AppServer, así como el tiempo de CPU consumido :

<%@ page import=»java.lang.management.*» %>

<%@ page import=»java.util.*» %>

<html>

<head>

<%

response.setHeader(«Cache-Control»,»no-store»); //HTTP 1.1

response.setHeader(«Pragma»,»no-cache»); //HTTP 1.0

response.setDateHeader («Expires», 0); //prevents caching at the proxy server

%>

<script type=»text/JavaScript»>

<!–

function timedRefresh(timeoutPeriod) {

setTimeout(«location.reload(true);»,timeoutPeriod);

}

// –>

</script>

</head>

<body onload=»timedRefresh(5000);»>

<%

out.println(«Comienzo Supervisión Hilos….<br>»);

String paqueteASupervisar = «»;

List<Thread> listaThreadApp = new java.util.ArrayList<Thread>();

ThreadGroup rootThreadGroup;

try {

ThreadMXBean bean =ManagementFactory.getThreadMXBean( );

ThreadGroup tg = Thread.currentThread().getThreadGroup();

ThreadGroup ptg;

while ((ptg = tg.getParent()) != null)

tg = ptg;

rootThreadGroup = tg;

ThreadMXBean thbean = ManagementFactory.getThreadMXBean();

int nAlloc = thbean.getThreadCount();

int n = 0;

Thread[] threads;

do {

nAlloc *= 2;

threads = new Thread[nAlloc];

n = rootThreadGroup.enumerate(threads, true);

} while (n == nAlloc);

out.println(«Encontrados «+n+» hilos<br>»);

for (int i = 0; i < threads.length; i++) {

if (threads[i] == null)

continue;

if (threads[i].getClass().getName().indexOf(paqueteASupervisar) != -1)

listaThreadApp.add(threads[i]);

}

out.println(«Cumplen el patrón «+paqueteASupervisar+» «+ listaThreadApp.size()+»hilos<br>»);

for (Iterator iterator = listaThreadApp.iterator(); iterator.hasNext();) {

Thread thread = (Thread) iterator.next();

String info=»»;

try {

final StackTraceElement[] ste = thread.getStackTrace();

StackTraceElement e = ste[ste.length-2];

info = «Thread en » + e.getClassName() + «.» + e.getMethodName()

+ » línea:» + e.getLineNumber()+ » CPU»;

out.println(info);

info = » [CPUTime=»+bean.getThreadCpuTime(thread.getId())+«,UserTime=»+bean.getThreadUserTime(thread.getId())+«]»;

out.println(info);

out.println(«<br>»);

} catch (Throwable e) {

out.println(«Desconocido»);

out.println(«<br>»);

}

}

} catch (Exception e) {

out.println(e.getMessage());

e.printStackTrace();

out.println(«<br>»);

}

%>

</body>

</html>

Cada 5 segundos el Jboss inunda la pantalla 🙂

Alguien se ofrece a mejorarla…

Deja un comentario