import java.io.BufferedWriter; import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.io.Writer; import java.lang.management.ManagementFactory; import java.lang.management.ThreadInfo; import java.lang.management.ThreadMXBean; import java.text.SimpleDateFormat; import java.util.Date; import java.util.HashMap; import java.util.Map; /** * Code which writes a stack dump for all threads to a file. */ public class DumpStack { // directory where the stack files are written private static final String STACK_DUMP_DIR = "./"; // here for testing public static void main(String[] args) throws Exception { dumpStacks(); } public static void dumpStacks() throws IOException { ThreadMXBean mxBean = ManagementFactory.getThreadMXBean(); ThreadInfo[] threadInfos = mxBean.getThreadInfo(mxBean.getAllThreadIds(), 0); Map<Long, ThreadInfo> threadInfoMap = new HashMap<Long, ThreadInfo>(); for (ThreadInfo threadInfo : threadInfos) { threadInfoMap.put(threadInfo.getThreadId(), threadInfo); } // choose our dump-file File dumpFile = new File(STACK_DUMP_DIR, "stacks." + System.currentTimeMillis()); Writer writer = new BufferedWriter(new FileWriter(dumpFile)); try { dumpTraces(mxBean, threadInfoMap, writer); } finally { writer.close(); } } private static void dumpTraces(ThreadMXBean mxBean, Map<Long, ThreadInfo> threadInfoMap, Writer writer) throws IOException { Map<Thread, StackTraceElement[]> stacks = Thread.getAllStackTraces(); writer.write("Dump of " + stacks.size() + " thread at " + new SimpleDateFormat("yyyy/MM/dd HH:mm:ss z").format(new Date(System.currentTimeMillis())) + "\n\n"); for (Map.Entry<Thread, StackTraceElement[]> entry : stacks.entrySet()) { Thread thread = entry.getKey(); writer.write("\"" + thread.getName() + "\" prio=" + thread.getPriority() + " tid=" + thread.getId() + " " + thread.getState() + " " + (thread.isDaemon() ? "deamon" : "worker") + "\n"); ThreadInfo threadInfo = threadInfoMap.get(thread.getId()); if (threadInfo != null) { writer.write(" native=" + threadInfo.isInNative() + ", suspended=" + threadInfo.isSuspended() + ", block=" + threadInfo.getBlockedCount() + ", wait=" + threadInfo.getWaitedCount() + "\n"); writer.write(" lock=" + threadInfo.getLockName() + " owned by " + threadInfo.getLockOwnerName() + " (" + threadInfo.getLockOwnerId() + "), cpu=" + (mxBean.getThreadCpuTime(threadInfo.getThreadId()) / 1000000L) + ", user=" + (mxBean.getThreadUserTime(threadInfo.getThreadId()) / 1000000L) + "\n"); } for (StackTraceElement element : entry.getValue()) { writer.write(" "); writer.write(element.toString()); writer.write("\n"); } writer.write("\n"); } } }
来自 http://pastebin.com/zwcKC0hz
相关推荐
Annotation [java] 代码注释 [ænәu'teiʃәn] anonymous adj.匿名的[ә'nɒnimәs]'(反义:directly adv.直接地,立即[di'rektli, dai'rektli]) apply v.应用,适用 [ә'plai] application n.应用,应用程序 [,æ...
打印出第一个大于 3.1415小于 3.1416的值 class Pi { public static void main(String[] args){ double pi =0; //定义初始值 double fenZi = 4; //分子为4 double fenMu = 1; //第一个4,可看作分母为1 的...
每一段连线都是 hub 与 USB 设备的点对点连接,后者可以是为系统提供更多附加点的另一个 hub,也可以是一个提供功能的某种设备。主机使用主/从协议与 USB 设备通信。这种方式解决了包冲突的问题,但是同时也阻止了...
永久弃用的代码段注释掉即可,即不用加任何注释。 C .对于暂时被注释掉,后续可能恢复使用的代码片断,在注释代码上方,统一规定使用三 个斜杠(///)来说明注释掉代码的理由。 D .不要在视图模板中加入任何复杂的...
我在大学时写了这段代码,我经常用它来生成方便、易于调试的终端和日志文件输出。 它包含我在本科级别的 Java 编码中发现有用的库代码。 最值得注意的是,它解决了以下烦人的问题: #1. 无法找到您的打印报表。 很...
� Android 更像一款桌面环境为 Java 的 Linux 操作系统。有助于 Google 实现其 " 随时随地为每个人提供信 息 " 的企业战略。 HTC HTC HTC HTC Dream/G1 Dream/G1 Dream/G1 Dream/G1 具体配置 硬件 3.17 英寸 HVGA ...
那么该程序会运行默认异常处理程序,退出JAVA,若Applet或基于GUI的APP,当一个异常未被“捕获”,GUI在运行默认异常处理程序依然会显示,而且用户使用的GUI处于一个不稳定的状态))<BR>JAVA代码中:1、可能出现...
,为了打印输出数组a的最后一个元素,下面正确的代码是( )。 A) System.out.println(a[10]); B) System.out.println(a[9]); C) System.out.println(a[a.length]); D) System.out.println(a(8)); 26.若一个类中对某个...
使用Toad,我们可以通过一个图形化的用户界面快速访问数据库,完成复杂的SQL和PL/SQL代码编辑和测试工作。Toad由Oracle开发专家专门为开发人员而设计,是一个功能强大、结构紧凑的专业化PL/SQL开发环境。 Toad 主要...
1.15 简单程序:打印一行文本 1.16 简单程序:两个整数相加 1.17 内存的概念 1.18 算术运算 1.19 判断:相等与关系运算符 1.20 新型头文件与名字空间 1.21 有关对象的思考 小结 术语 自测练习 自测练习答案 ...
1.15 简单程序:打印一行文本 1.16 简单程序:两个整数相加 1.17 内存的概念 1.18 算术运算 1.19 判断:相等与关系运算符 1.20 新型头文件与名字空间 1.21 有关对象的思考 小结 术语 自测练习 自测练习答案 ...
3.2.2. 高级使用:持久一个 DbTable 结果对象 3.2.3. 高级用法示例 3.3. 摘要式认证 3.3.1. 简介 3.3.2. 规范(Specifics) 3.3.3. 身份(Identity) 3.4. HTTP 认证适配器 3.4.1. 简介 3.4.2. 设计回顾 ...