用Java代码来触发生成ThreadDump[Java编程]
本文“用Java代码来触发生成ThreadDump[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
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[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |