25 import java.io.FileWriter; |
25 import java.io.FileWriter; |
26 import java.util.regex.Matcher; |
26 import java.util.regex.Matcher; |
27 import java.util.regex.Pattern; |
27 import java.util.regex.Pattern; |
28 import java.util.Arrays; |
28 import java.util.Arrays; |
29 import java.util.stream.Collectors; |
29 import java.util.stream.Collectors; |
30 import sun.management.ManagementFactoryHelper; |
30 import java.lang.management.ManagementFactory; |
31 import com.sun.management.DiagnosticCommandMBean; |
31 import javax.management.MalformedObjectNameException; |
|
32 import javax.management.ObjectName; |
32 |
33 |
33 public class NMTHelper |
34 public class NMTHelper |
34 { |
35 { |
35 public static void baseline() { |
36 public static void baseline() { |
36 executeDcmd("vmNativeMemory", "baseline"); |
37 executeDcmd("vmNativeMemory", "baseline"); |
51 } |
52 } |
52 throw new Exception("Could not find the Total line in the NMT output."); |
53 throw new Exception("Could not find the Total line in the NMT output."); |
53 } |
54 } |
54 |
55 |
55 private static String executeDcmd(String cmd, String ... args) { |
56 private static String executeDcmd(String cmd, String ... args) { |
56 DiagnosticCommandMBean dcmd = ManagementFactoryHelper.getDiagnosticCommandMBean(); |
57 ObjectName oname = null; |
|
58 try { |
|
59 oname = ObjectName.getInstance("com.sun.management:type=DiagnosticCommand"); |
|
60 } catch (MalformedObjectNameException mone) { |
|
61 throw new RuntimeException(mone); |
|
62 } |
57 Object[] dcmdArgs = {args}; |
63 Object[] dcmdArgs = {args}; |
58 String[] signature = {String[].class.getName()}; |
64 String[] signature = {String[].class.getName()}; |
59 |
65 |
60 String cmdString = cmd + " " + |
66 String cmdString = cmd + " " + |
61 Arrays.stream(args).collect(Collectors.joining(" ")); |
67 Arrays.stream(args).collect(Collectors.joining(" ")); |
62 File f = new File("dcmdoutput-" + cmd + "-" + System.currentTimeMillis() + ".txt"); |
68 File f = new File("dcmdoutput-" + cmd + "-" + System.currentTimeMillis() + ".txt"); |
63 System.out.println("Output from Dcmd '" + cmdString + "' is being written to file " + f); |
69 System.out.println("Output from Dcmd '" + cmdString + "' is being written to file " + f); |
64 try (FileWriter fw = new FileWriter(f)) { |
70 try (FileWriter fw = new FileWriter(f)) { |
65 fw.write("> " + cmdString + ":"); |
71 fw.write("> " + cmdString + ":"); |
66 String result = (String) dcmd.invoke(cmd, dcmdArgs, signature); |
72 String result = (String)ManagementFactory.getPlatformMBeanServer(). |
|
73 invoke(oname, cmd, dcmdArgs, signature); |
67 fw.write(result); |
74 fw.write(result); |
68 return result; |
75 return result; |
69 } catch(Exception ex) { |
76 } catch(Exception ex) { |
70 ex.printStackTrace(); |
77 ex.printStackTrace(); |
71 } |
78 } |