轻松获取jvm线程的java api
2015-09-11 00:00
731 查看
摘要: 轻松获取jvm线程的java api,类似于jstack
轻松获取jvm线程的代码
实现类似jstack的功能
轻松获取jvm线程的代码
<%@ page import="java.util.Iterator" %> <%@ page import="java.util.Map" %> <%@ page import="java.util.HashMap" %> <%@ page contentType="text/html;charset=UTF-8" session="false" language="java"%> <html> <head> <title>Threads</title> <script> function toggleStacks(id) { var ele = document.getElementById(id); if(!ele.style.display || ele.style.display != "none") { ele.style.display = "none"; } else { ele.style.display = "block"; } return false; } </script> <style type="text/css"> li { list-style-type: none; display: inline; } </style> </head> <body> <a href="javascript:void(0)" onclick="return toggleStacks('system-res');">resource</a><br/> <div id="system-res"> <ul> <li>freeMemory: <%=Runtime.getRuntime().freeMemory()/(1024*1024)%>M;</li> <li>totalMemory: <%=Runtime.getRuntime().totalMemory()/(1024*1024)%>M;</li> <li>maxMemory: <%=Runtime.getRuntime().maxMemory()/(1024*1024)%>M;</li> </ul> </div> <% Map<Thread, StackTraceElement[]> allStacks = Thread.getAllStackTraces(); Map<Thread.State, Map<Thread, StackTraceElement[]>> classifyThreads = new HashMap<Thread.State, Map<Thread, StackTraceElement[]>>(); if (allStacks != null) { Iterator<Map.Entry<Thread, StackTraceElement[]>> stackIterator = allStacks.entrySet().iterator(); while (stackIterator.hasNext()) { Map.Entry<Thread, StackTraceElement[]> stackEntry = stackIterator.next(); Thread thread = stackEntry.getKey(); Thread.State state = thread.getState(); StackTraceElement[] traceElements = stackEntry.getValue(); Map<Thread, StackTraceElement[]> threadStacks = classifyThreads.get(state); if(threadStacks == null) { threadStacks = new HashMap<Thread, StackTraceElement[]>(); classifyThreads.put(state, threadStacks); } threadStacks.put(thread, traceElements); } } for(Thread.State state : Thread.State.values()) { Map<Thread, StackTraceElement[]> threadStacks = classifyThreads.get(state); if(threadStacks != null) { Iterator<Map.Entry<Thread, StackTraceElement[]>> stackIterator = threadStacks.entrySet().iterator(); out.println("<b>"+state.name()+"("+threadStacks.size()+")</b><br/><hr/>"); while (stackIterator.hasNext()) { Map.Entry<Thread, StackTraceElement[]> stackEntry = stackIterator.next(); Thread thread = stackEntry.getKey(); StackTraceElement[] traceElements = stackEntry.getValue(); out.println("<pre>"); out.println("<a href=\"javascript:void(0);\" onclick=\"return toggleStacks('thread-"+thread.getId()+"');\">" + thread + "-" + thread.getState() + ":" + thread.getId() + "(" + traceElements.length + ")</a>"); if(traceElements != null) { out.println("<div id=\"thread-"+thread.getId()+"\" style=\"display:none;\">"); for(StackTraceElement stack : traceElements) { out.println(" " + stack + " - " + stack.getFileName()); } out.println("<div>"); } out.println("</pre>"); } out.println("<br/>"); } } %> </body> </html>
实现类似jstack的功能
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序
- 二叉查找树
- Java 6 JVM参数选项大全(中文版)