java 获取thread dump_[Java教程]Java Se:使用Java Runtime 获取ThreadDump

[Java教程]Java Se:使用Java Runtime 获取ThreadDump

0 2015-05-12 16:00:29

Java Runtime中exe()定义如下:exec(String command, String[] envp, File dir) Executes the specified string command in a separate process with the specified environment and working directory.

在一个单独的进程中在指定的工作目录work directory下使用指定的环境变量envp执行指定的命令cmmand。

下面是这个方法的参数说明:

Command:

“exeFile” 在windows上执行一个exe文件

“cmd /c batFile” 在windows系统执行一个batFile

“/bin/sh -C shFile” 在Linux系统执行一个sh文件

Envp:程序执行时的环境变量,是一个数组,数组中每个元素是key=value形式的。

dir:是程序运行的工作目录,也就是要执行的程序所在的目录,如果要执行的程序已加入环境变量,则可以是null。

例如在windows系统中,使用JavaRuntime来启动Tomcat:process = Runtime.getRuntime().exec("cmd /c startup.bat", env.toArray(new String[0]), new File("E:\\Program Files\\apache\\tomcat\\apache-tomcat-6.0.41\\bin"));

最后的dir是tomcat的bin目录,也就是要执行的batFile所在的目录。

Tomcat已经启动,现在通过Java Runtime来获取Tomcat的ThreadDump。

下面是使用Java 中JStack来获取ThreadDump的程序:import java.io.IOException;import java.io.InputStream;import java.util.LinkedList;import java.util.List;import java.util.Map;import java.util.Scanner;public class JStack { public static void main(String[] args) throws InterruptedException { Process process = null; List env = new LinkedList(); try { Map currentEnv = System.getenv(); for (String key : currentEnv.keySet()) { String value = currentEnv.get(key); if (value != null && !value.isEmpty()) { env.add(key + "=" + value); } } // "cmd /c jstack -F 8660"// 在命令行使用jps查得tomcat的进程Id是8660。 env.toArray(new String[0]); System.out.println(env.toString()); process = Runtime.getRuntime().exec("cmd /c jstack -F 8660", env.toArray(new String[0]), null); InputStream input = process.getInputStream(); Scanner inputScanner = null; inputScanner = new Scanner(input); String line = null; while (inputScanner.hasNextLine()) { if ((line = inputScanner.nextLine()) != null) { System.out.println(line); } } int exitValue; if (process.waitFor() != 0) { exitValue = process.exitValue(); if (exitValue == 0) { if (inputScanner != null) { inputScanner.close(); } } } } catch (IOException e) { e.printStackTrace(); } finally { if (process != null) { process.destroy(); process = null; } } System.out.println("hello"); }}

另外在windows上可以使用 CTRL+BREAKSPACE组合键获取ThreadDump,在Linux上可以使用kill -3 pid来获取ThreadDump。

本文网址:http://www.shaoqun.com/a/116679.html

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们:admin@shaoqun.com。

JAVA

0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值