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