java 遇到未知异常使程序崩溃,输出jvm的dump崩溃信息到指定文件,然后杀死此进程
来源:互联网 发布:vue.js验证手机号码 编辑:程序博客网 时间:2024/06/06 08:41
1.我们首先需要获取当前java进程的pid。方法为:
//查看当前进程pid private static void getPID(){ RuntimeMXBean runtime = ManagementFactory.getRuntimeMXBean(); String name = runtime.getName(); System.out.println("当前进程的标识为:"+name); int index = name.indexOf("@"); if (index != -1) { int pid = Integer.parseInt(name.substring(0, index)); System.out.println("当前进程的PID为:"+pid); } }
假设该进程pid为8643
windows下执行命令:taskkill /pid 8436 /f 来强制终止该pid进程。
linux下执行:kill-9 8643来强制终止该pid进程
2.导出jvm中内存信息
jmap -dump:format=b,file=文件名 [pid]
3.java方法调用shell命令
String cmds = "jmap -dump:format=b,file=e:/jmap/"+System.currentTimeMillis()+".hprof "+pid; Process pro = Runtime.getRuntime().exec(cmds); pro.waitFor(); in = pro.getInputStream(); BufferedReader read = new BufferedReader(new InputStreamReader(in)); String result = read.readLine(); System.out.println(result); 上述代码就可以将制定pid的java进程的dump文件以文件的形式输出到制定目录下。 问题:在cmds命令中,hprof与pid之间一定要有空格。
4.有些linux系统可能不能执行jmap命令:此时需要yum安装即可。
yum install java-1.8.0-openjdk-devel-debug
阅读全文