[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