<%@page import="org.apache.jasper.tagplugins.jstl.core.Out"%> <%@page import="java.util.HashMap"%> <%@page import="java.util.Map"%> <%@page import="java.lang.management.ThreadInfo"%> <%@page import="java.lang.management.ThreadMXBean"%> <%@page import="java.lang.management.ManagementFactory"%> <%@ page language="java" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="/WEB-INF/c.tld"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%> Threads in ldcstudy.com java.io.tmpdir:
Memory:
  1. freeMemory=<%=Runtime.getRuntime().freeMemory()/(1024*1024)%>M
  2. totalMemory=<%=Runtime.getRuntime().totalMemory()/(1024*1024)%>M
  3. maxMemory=<%=Runtime.getRuntime().maxMemory()/(1024*1024)%>M

Thread:
    <% for(Thread t : list_threads()){%>
  1. <%=t.getName()%>(<%=t.getState()%>)[<%=timemap.get(t.getId()) %>] : <%=t.getClass().getName()%>
  2. <%}%>
<%! public static java.util.List list_threads(){ int tc = Thread.activeCount(); Thread[] ts = new Thread[tc]; Thread.enumerate(ts); return java.util.Arrays.asList(ts); } public static Map cputime(){ ThreadMXBean tm = ManagementFactory.getThreadMXBean(); tm.setThreadContentionMonitoringEnabled(true); long [] tid = tm.getAllThreadIds(); ThreadInfo [] tia = tm.getThreadInfo(tid, Integer.MAX_VALUE); long [][] threadArray = new long[tia.length][2]; Map map = new HashMap(); for (int i = 0; i < tia.length; i++) { long threadId = tia[i].getThreadId(); long cpuTime = tm.getThreadCpuTime(tia[i].getThreadId())/(1000*1000*1000); //threadArray[i][0] = threadId; //threadArray[i][1] = cpuTime; map.put(threadId, cpuTime); } return map; } Map timemap = cputime(); Map cpuTimes = new HashMap(); Map cpuTimeFetch = new HashMap(); %>
<% long cpus = Runtime.getRuntime().availableProcessors(); ThreadMXBean threads = ManagementFactory.getThreadMXBean(); threads.setThreadContentionMonitoringEnabled(true); long now = System.currentTimeMillis(); ThreadInfo[] t = threads.dumpAllThreads(false, false); out.print("t.length...." + t.length); int blockCount = 0; for (int i = 0; i < t.length; i++) { long id = t[i].getThreadId(); Long idObj = new Long(id); long current = 0; if (cpuTimes.get(idObj) != null) { long prev = ((Long) cpuTimes.get(idObj)).longValue(); current = threads.getThreadCpuTime(t[i].getThreadId()); long catchTime = ((Long) cpuTimes.get(idObj)).longValue(); double percent = (double)(current - prev) / (double)((now - catchTime) * cpus * 1000); out.print("
  • " + t[i].getThreadName()+ ":" + t[i].getBlockedTime() + ":" + percent + " : " + prev + "
  • "); if (percent > 0 && prev > 0) { out.println("
  • " + t[i].getThreadName()+"#"+t[i].getThreadId() + " Time: " + percent + " (" + prev + ", " + current + ") "); String locked = t[i].getLockInfo()==null?"":t[i].getLockInfo().getClass().toString(); out.println(" Blocked: (" + t[i].getBlockedTime() + ", " + t[i].getBlockedCount() + ", " + locked + ")
  • "); StackTraceElement[] te = t[i].getStackTrace(); out.println("
      "); for(int j = 0; j < te.length; j++){ out.println("
    • " + te[j].getClassName()+"#"+te[j].getMethodName() + " (LineNumber: " + te[j].getLineNumber() + ") "); } out.println("
    "); blockCount ++; } } cpuTimes.put(idObj, new Long(current)); cpuTimes.put(idObj, new Long(now)); } out.print("
  • 总阻塞线程:" + blockCount +" 个
  • "); %> //源代码片段来自云代码http://yuncode.net