快速业务通道

用Java代码来触发生成ThreadDump - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-21

用Java代码来触发生成ThreadDump

时间:2011-01-16 BlogJava BeanSoft

ThreadDump对于JVM诊断和调优是个好东西. 以前, 我们生成ThreadDump, 一般都需要另外连到服务器上的进程管理器才行, 不管是Ctrl+Break还是kill –3, 比较不方便. 有时候, 也许想远程直接生成并检查一下服务器的ThreadDump, 这个怎么办呢? 幸好我们有以下代码可以做到:

util.threaddump.ThreadDumpBuilder.java

package util.threaddump; import java.util.Map; /** * 使用 Java 远程代码生成 ThreadDump. 适用于 JDK 1.5+. * 参考: {@link Thread#getStackTrace()} * {@link Throwable#getStackTrace()} * @see StackTraceElement * @author beansoft@126.com * 转载请注明出处: beansoft.blogjava.net */ public class ThreadDumpBuilder {      /**       * 生成并返回 Thread Dump.       * 转载请注明出处: beansoft.blogjava.net       * @return       */      public String build() {          StringBuilder output = new StringBuilder(1000);          for (Map.Entry stackTrace : Thread.getAllStackTraces().entrySet()) {              appendThreadStackTrace(output, (Thread) stackTrace.getKey(),                      (StackTraceElement[]) stackTrace.getValue());          }          return output.toString();      }      /**       * 处理并输出堆栈信息.       * @param output       *            输出内容       * @param thread       *            线程       * @param stack       *            线程堆栈       */      private void appendThreadStackTrace(StringBuilder output, Thread thread,              StackTraceElement[] stack) {          // 忽略当前线程的堆栈信息          if (thread.equals(Thread.currentThread())) {              return;          }          output.append(thread).append("\n");          for (StackTraceElement element : stack) {              output.append("\t").append(element).append("\n");          }      } }

喘Java旗鷹栖乾窟伏撹ThreadDump(2)

扮寂:2011-01-16 BlogJava BeanSoft

隼朔壓匯倖JSP戦賜宀Servlet嶄販吭距喘軸辛:

<%=new ThreadDumpBuilder().build() %>

厘喘議 Oracle JRocket ReamTime 議JVM怒議腎議Tomcat, 補竃坪否泌和:

Thread[(GC Main Thread),5,system] Thread[Main Thread,5,main]   java.net.PlainSocketImpl.socketAccept(Native Method)   java.net.PlainSocketImpl.accept(PlainSocketImpl.java:384)   java.net.ServerSocket.implAccept(ServerSocket.java:453)   java.net.ServerSocket.accept(ServerSocket.java:421)   org.apache.catalina.core.StandardServer.await(StandardServer.java:389)   org.apache.catalina.startup.Catalina.await(Catalina.java:630)   org.apache.catalina.startup.Catalina.start(Catalina.java:590)   sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)   sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号