下面列出了java.lang.management.PlatformManagedObject#java.lang.management.RuntimeMXBean 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。
private static void connect(String pid, String address) throws Exception {
if (address == null) {
throw new RuntimeException("Local connector address for " +
pid + " is null");
}
System.out.println("Connect to process " + pid + " via: " + address);
JMXServiceURL url = new JMXServiceURL(address);
JMXConnector c = JMXConnectorFactory.connect(url);
MBeanServerConnection server = c.getMBeanServerConnection();
System.out.println("Connected.");
RuntimeMXBean rt = newPlatformMXBeanProxy(server,
RUNTIME_MXBEAN_NAME, RuntimeMXBean.class);
System.out.println(rt.getName());
// close the connection
c.close();
}
/**
* Gets the system parameters and environment parameters that were passed to the JVM on startup.
*
* @return The options passed to the JVM on startup.
*/
public static String getJvmStartupOptions() {
try {
final RuntimeMXBean bean = ManagementFactory.getRuntimeMXBean();
final StringBuilder bld = new StringBuilder();
for (String s : bean.getInputArguments()) {
bld.append(s).append(' ');
}
return bld.toString();
}
catch (Throwable t) {
return UNKNOWN;
}
}
private static void getProcessInfo(Metrics metrics) {
if (System.getProperty("os.name").startsWith("Linux")
|| System.getProperty("os.name").startsWith("Mac")) {
// This solution only work for Linux like system.
RuntimeMXBean mxBean = ManagementFactory.getRuntimeMXBean();
String pid = mxBean.getName().split("@")[0];
String cmd = "ps -o %cpu= -o rss= -p " + pid;
try {
Process process = Runtime.getRuntime().exec(cmd);
try (InputStream is = process.getInputStream()) {
String line = new String(readAll(is), StandardCharsets.UTF_8).trim();
String[] tokens = line.split("\\s+");
if (tokens.length != 2) {
logger.error("Invalid ps output: {}", line);
return;
}
float cpu = Float.parseFloat(tokens[0]);
long rss = Long.parseLong(tokens[1]);
metrics.addMetric("cpu", cpu, "%");
metrics.addMetric("rss", rss, "KB");
}
} catch (IOException e) {
logger.error("Failed execute cmd: " + cmd, e);
}
}
}
private static Integer getProcessId() {
try {
// Get the current process id using a reflection hack
RuntimeMXBean runtime = ManagementFactory.getRuntimeMXBean();
Field jvm = runtime.getClass().getDeclaredField("jvm");
jvm.setAccessible(true);
VMManagement mgmt = (sun.management.VMManagement) jvm.get(runtime);
Method pid_method = mgmt.getClass().getDeclaredMethod("getProcessId");
pid_method.setAccessible(true);
Integer pid = (Integer) pid_method.invoke(mgmt);
return pid;
} catch(Exception ex) {
return null;
}
}
/**
* obtain current process cpu utilization if jdk version is 1.6 by-hongqiangwei
*/
@SuppressWarnings("restriction")
public static double getProcessCpuUtilization() {
com.sun.management.OperatingSystemMXBean osMBean = (com.sun.management.OperatingSystemMXBean) ManagementFactory
.getOperatingSystemMXBean();
RuntimeMXBean runtimeMXBean = ManagementFactory.getRuntimeMXBean();
long processCpuTime1 = osMBean.getProcessCpuTime();
long runtime1 = runtimeMXBean.getUptime();
ThreadHelper.suspend(50);
long processCpuTime2 = osMBean.getProcessCpuTime();
long runtime2 = runtimeMXBean.getUptime();
long deltaProcessTime = processCpuTime2 - processCpuTime1;
long deltaRunTime = (runtime2 - runtime1) * 1000000L;
int cpuNumber = Runtime.getRuntime().availableProcessors();
double cpuUtilization = (double) deltaProcessTime / (deltaRunTime * cpuNumber);
return cpuUtilization;
}
private static void connect(String pid, String address) throws Exception {
if (address == null) {
throw new RuntimeException("Local connector address for " +
pid + " is null");
}
System.out.println("Connect to process " + pid + " via: " + address);
JMXServiceURL url = new JMXServiceURL(address);
JMXConnector c = JMXConnectorFactory.connect(url);
MBeanServerConnection server = c.getMBeanServerConnection();
System.out.println("Connected.");
RuntimeMXBean rt = newPlatformMXBeanProxy(server,
RUNTIME_MXBEAN_NAME, RuntimeMXBean.class);
System.out.println(rt.getName());
// close the connection
c.close();
}
public static long getDirectMemorySize() {
RuntimeMXBean RuntimemxBean = ManagementFactory.getRuntimeMXBean();
List<String> arguments = Lists.reverse(RuntimemxBean.getInputArguments());
long multiplier = 1; //for the byte case.
for (String s : arguments) {
if (s.contains(MAX_DIRECT_MEMORY_PARAM)) {
String memSize = s.toLowerCase()
.replace(MAX_DIRECT_MEMORY_PARAM.toLowerCase(), "").trim();
if (memSize.contains("k")) {
multiplier = 1024;
}
else if (memSize.contains("m")) {
multiplier = 1048576;
}
else if (memSize.contains("g")) {
multiplier = 1073741824;
}
memSize = memSize.replaceAll("[^\\d]", "");
long retValue = Long.parseLong(memSize);
return retValue * multiplier;
}
}
return DEFAULT_SIZE;
}
@Override
public Map<String, Object> asJson() {
RuntimeMXBean runtimeMXBean = ManagementFactory.getRuntimeMXBean();
long uptime = runtimeMXBean.getUptime();
long uptimeInSeconds = uptime / 1000;
long numberOfHours = uptimeInSeconds / (60 * 60);
long numberOfMinutes = (uptimeInSeconds / 60) - (numberOfHours * 60);
long numberOfSeconds = uptimeInSeconds % 60;
LinkedHashMap<String, Object> json = new LinkedHashMap<>();
json.put("Name", runtimeMXBean.getName());
json.put("Uptime", runtimeMXBean.getUptime());
json.put("Uptime (in Time Format)", "[About " + numberOfHours + " hours, " + numberOfMinutes + " minutes, " + numberOfSeconds + " seconds]");
json.put("Spec Name", runtimeMXBean.getSpecName());
json.put("Spec Vendor", runtimeMXBean.getSpecVendor());
json.put("Spec Version", runtimeMXBean.getSpecVersion());
json.put("Input Arguments", runtimeMXBean.getInputArguments());
json.put("System Properties", new TreeMap<>(asIndentedMultilineValuesAsJson(runtimeMXBean.getSystemProperties())));
json.put("Environment Variables", new TreeMap<>(asIndentedMultilineValuesAsJson(System.getenv())));
return json;
}
private static JavaInfo createJavaInfo(String glowrootVersion, JvmConfig jvmConfig,
RuntimeMXBean runtimeMXBean) {
String jvm = "";
String javaVmName = StandardSystemProperty.JAVA_VM_NAME.value();
if (javaVmName != null) {
jvm = javaVmName + " (" + StandardSystemProperty.JAVA_VM_VERSION.value() + ", "
+ System.getProperty("java.vm.info") + ")";
}
String javaVersion = StandardSystemProperty.JAVA_VERSION.value();
String heapDumpPath = getHeapDumpPathFromCommandLine();
if (heapDumpPath == null) {
String javaTempDir =
MoreObjects.firstNonNull(StandardSystemProperty.JAVA_IO_TMPDIR.value(), ".");
heapDumpPath = new File(javaTempDir).getAbsolutePath();
}
return JavaInfo.newBuilder()
.setVersion(Strings.nullToEmpty(javaVersion))
.setVm(jvm)
.addAllArg(Masking.maskJvmArgs(runtimeMXBean.getInputArguments(),
jvmConfig.maskSystemProperties()))
.setHeapDumpDefaultDir(heapDumpPath)
.setGlowrootAgentVersion(glowrootVersion)
.build();
}
public static void printRuntimeInfo() {
System.out.println();
RuntimeMXBean m = java.lang.management.ManagementFactory
.getRuntimeMXBean();
System.out.println("BootClassPath = " + m.getBootClassPath());
System.out.println("ClassPath = " + m.getClassPath());
System.out.println("LibraryPath = " + m.getLibraryPath());
System.out.println("ManagementSpecVersion = "
+ m.getManagementSpecVersion());
System.out.println("Name = " + m.getName());
System.out.println("SpecName = " + m.getSpecName());
System.out.println("SpecVendor = " + m.getSpecVendor());
System.out.println("SpecVersion = " + m.getSpecVersion());
System.out.println("UpTime = " + m.getUptime());
System.out.println("VmName = " + m.getVmName());
System.out.println("VmVendor = " + m.getVmVendor());
System.out.println("VmVersion = " + m.getVmVersion());
System.out.println("InputArguments = " + m.getInputArguments());
System.out.println("BootClassPathSupported = "
+ m.isBootClassPathSupported());
System.out.println("---all properties--");
System.out.println("SystemProperties = " + m.getSystemProperties());
System.out.println("---");
System.out.println();
}
@Override
public Jvm createModelFor(Application app) {
Jvm jvm = null;
JvmstatModel jvmstat = JvmstatModelFactory.getJvmstatFor(app);
if (jvmstat != null) {
String vmName = jvmstat.findByName(VM_NAME);
if (JROCKIT_VM_NAME.equals(vmName)) {
jvm = new JRockitJVMImpl(app, jvmstat);
}
} else {
JmxModel jmxModel = JmxModelFactory.getJmxModelFor(app);
if (jmxModel != null && jmxModel.getConnectionState() == JmxModel.ConnectionState.CONNECTED) {
JvmMXBeans mxbeans = JvmMXBeansFactory.getJvmMXBeans(jmxModel);
if (mxbeans != null) {
RuntimeMXBean runtime = mxbeans.getRuntimeMXBean();
if (runtime != null && JROCKIT_VM_NAME.equals(runtime.getVmName())) {
jvm = new JRockitJVMImpl(app);
}
}
}
}
return jvm;
}
public Java6CpuLoadMetric() {
final OperatingSystemMXBean operatingSystemMXBean = (com.sun.management.OperatingSystemMXBean) ManagementFactory.getOperatingSystemMXBean();
if (operatingSystemMXBean == null) {
throw new IllegalStateException("OperatingSystemMXBean not available");
}
final RuntimeMXBean runtimeMXBean = ManagementFactory.getRuntimeMXBean();
if (runtimeMXBean == null) {
throw new IllegalStateException("RuntimeMXBean not available");
}
CpuUsageProvider jvmCpuUsageProvider = new JvmCpuUsageProvider(operatingSystemMXBean, runtimeMXBean);
try {
jvmCpuUsageProvider.getCpuUsage();
} catch (NoSuchMethodError e) {
logger.warn("Expected method not found for retrieving jvm cpu usage. Cause : {}", e.getMessage());
jvmCpuUsageProvider = CpuUsageProvider.UNSUPPORTED;
}
this.jvmCpuUsageProvider = jvmCpuUsageProvider;
}
private static Integer getProcessId() {
try {
// Get the current process id using a reflection hack
RuntimeMXBean runtime = ManagementFactory.getRuntimeMXBean();
Field jvm = runtime.getClass().getDeclaredField("jvm");
jvm.setAccessible(true);
VMManagement mgmt = (sun.management.VMManagement) jvm.get(runtime);
Method pid_method = mgmt.getClass().getDeclaredMethod("getProcessId");
pid_method.setAccessible(true);
Integer pid = (Integer) pid_method.invoke(mgmt);
return pid;
} catch(Exception ex) {
return null;
}
}
@Override
public void run() throws ClientException, ApiException {
RuntimeMXBean mxBean = ManagementFactory.getRuntimeMXBean();
long uptime = mxBean.getUptime();
String hms = String.format("%02d:%02d:%02d", TimeUnit.MILLISECONDS.toHours(uptime),
TimeUnit.MILLISECONDS.toMinutes(uptime) - TimeUnit.HOURS.toMinutes(TimeUnit.MILLISECONDS.toHours(uptime)),
TimeUnit.MILLISECONDS.toSeconds(uptime) - TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(uptime)));
String msg = "Uptime is " + hms + ".\n" +
"Statistics: \n"
+ "Executed commands " + Statistic.get(Statistic.Event.COMMAND) + "\n"
+ "Failed commands " + Statistic.get(Statistic.Event.FAILED_COMMAND) + "\n"
+ "Loaded users " + YouTrackUsersStorage.getInstance().getCount();
sendMessage(msg);
}
@Override
protected long getLastModifiedTime() {
try {
URL url = ResourceUtils.getResourceAsUrl(resource);
if ("file".equals(url.getProtocol())) {
File file = new File(url.getFile());
return file.lastModified();
}
} catch (IOException ex) {
// ignore
}
RuntimeMXBean runtimeMXBean = ManagementFactory.getRuntimeMXBean();
long startTime = runtimeMXBean.getStartTime();
// Container start time (browsers are only accurate to the second)
return startTime - (startTime % 1000);
}
/**
* 获取进程ID
*
* @author sxp
* @since 2018/12/1
*/
public static int getPid() {
if (PID < 0) {
try {
RuntimeMXBean runtime = ManagementFactory.getRuntimeMXBean();
String name = runtime.getName(); // format: "[email protected]"
PID = Integer.parseInt(name.substring(0, name.indexOf('@')));
} catch (Throwable e) {
PID = 0;
}
}
return PID;
}
@Override
public Statement apply(final Statement base, final Description description) {
if (System.getProperty("os.name", "unknown").toLowerCase().startsWith("windows")) {
return base;
}
return new Statement() {
@Override
public void evaluate() throws Throwable {
final ScheduledExecutorService ses = Executors.newScheduledThreadPool(1, new DaemonThreadFactory(ThreadStackRule.class.getSimpleName() + "-"));
final ScheduledFuture<?> task = ses.scheduleAtFixedRate(new Runnable() {
@Override
public void run() {
final RuntimeMXBean bean = ManagementFactory.getRuntimeMXBean();
String pid = bean.getName();
if (pid.contains("@")) {
pid = pid.substring(0, pid.indexOf("@"));
}
try {
Pipe.pipe(Runtime.getRuntime().exec("kill -3 " + pid));
} catch (final Exception exception) {
exception.printStackTrace();
}
}
}, 2, 2, TimeUnit.MINUTES);
try {
base.evaluate();
} finally {
task.cancel(true);
ses.shutdownNow();
}
}
};
}
public static int getPid() {
RuntimeMXBean runtime = ManagementFactory.getRuntimeMXBean();
String name = runtime.getName(); // format: "[email protected]"
try {
return Integer.parseInt(name.substring(0, name.indexOf('@')));
} catch (Exception e) {
return -1;
}
}
/**
* ���� MXBean �ķ��������ַ���
*/
public static Map<String, String> visitMBean(){
Map<String, String> map = new HashMap<>();
RuntimeMXBean mxbean = ManagementFactory.getRuntimeMXBean();
String vendor1 = mxbean.getVmVendor();
// System.out.println("vendor1:" + vendor1);
map.put("vendor1:", vendor1);
return map;
}
/**
* Get the string containing input arguments passed to the VM
*
* @return arguments
*/
public static String getVmInputArguments() {
RuntimeMXBean runtime = ManagementFactory.getRuntimeMXBean();
List<String> args = runtime.getInputArguments();
StringBuilder result = new StringBuilder();
for (String arg : args)
result.append(arg).append(' ');
return result.toString();
}
private void displayRuntimeInfo(CommandSender sender, RuntimeMXBean runtimeBean) {
long uptime = runtimeBean.getUptime();
String uptimeFormat = LagMonitor.formatDuration(Duration.ofMillis(uptime));
displayMemoryInfo(sender, Runtime.getRuntime());
// runtime specific
sendMessage(sender, "Uptime", uptimeFormat);
sendMessage(sender, "Arguments", runtimeBean.getInputArguments().toString());
sendMessage(sender, "Classpath", runtimeBean.getClassPath());
sendMessage(sender, "Library path", runtimeBean.getLibraryPath());
}
/**
* Gets current pid, max pid 32 bit systems 32768, for 64 bit 4194304
* http://unix.stackexchange.com/questions/16883/what-is-the-maximum-value-of-the-pid-of-a-process
* http://stackoverflow.com/questions/35842/how-can-a-java-program-get-its-own-process-id
*/
private static int getProcessId() {
String value = "";
try {
final RuntimeMXBean runtime = ManagementFactory.getRuntimeMXBean();
value = runtime.getName();
} catch (final Throwable t) {
if (logger.isDebugEnabled()) {
logger.debug("Could not invoke ManagementFactory.getRuntimeMXBean().getName(), {}.",
StackTraceUtil.stackTrace(t));
}
}
// something like '<pid>@<hostname>', at least in SUN / Oracle JVMs
final int atIndex = value.indexOf('@');
if (atIndex >= 0) {
value = value.substring(0, atIndex);
}
int pid = -1;
try {
pid = Integer.parseInt(value);
} catch (final NumberFormatException ignored) {
// value did not contain an integer
}
if (pid < 0 || pid > MAX_PROCESS_ID) {
pid = ThreadLocalRandom.current().nextInt(MAX_PROCESS_ID + 1);
logger.warn("Failed to find the current process ID from '{}'; using a random value: {}.", value, pid);
}
return pid;
}
MonitoredDataImpl(JmxSupport jmxSupport,JvmMXBeans jmxModel) {
this(jmxSupport);
RuntimeMXBean runtimeBean = jmxModel.getRuntimeMXBean();
upTime = runtimeBean.getUptime();
ClassLoadingMXBean classBean = jmxModel.getClassLoadingMXBean();
ThreadMXBean threadBean = jmxModel.getThreadMXBean();
MemoryUsage mem = jmxModel.getMemoryMXBean().getHeapMemoryUsage();
MemoryPoolMXBean permBean = jmxSupport.getPermGenPool();
unloadedClasses = classBean.getUnloadedClassCount();
loadedClasses = classBean.getLoadedClassCount() + unloadedClasses;
sharedLoadedClasses = 0;
sharedUnloadedClasses = 0;
threadsDaemon = threadBean.getDaemonThreadCount();
threadsLive = threadBean.getThreadCount();
threadsLivePeak = threadBean.getPeakThreadCount();
threadsStarted = threadBean.getTotalStartedThreadCount();
applicationTime = 0;
genCapacity = new long[2];
genUsed = new long[2];
genMaxCapacity = new long[2];
genCapacity[0] = mem.getCommitted();
genUsed[0] = mem.getUsed();
genMaxCapacity[0] = mem.getMax();
if (permBean != null) {
MemoryUsage perm = permBean.getUsage();
genCapacity[1] = perm.getCommitted();
genUsed[1] = perm.getUsed();
genMaxCapacity[1] = perm.getMax();
}
}
public static Integer getProcessId() {
if (processId == null) {
synchronized (PropUtil.class) {
if (processId == null) {
RuntimeMXBean runtime = ManagementFactory.getRuntimeMXBean();
String name = runtime.getName();
processId = Integer.parseInt(name.substring(0, name.indexOf("@")));
}
}
}
return processId;
}
/**
* Log information about the currently running JVM.
*/
public static void logJVMInfo() {
// Print out vm stats before starting up.
RuntimeMXBean runtime = ManagementFactory.getRuntimeMXBean();
if (runtime != null) {
LOG.info("vmName=" + runtime.getVmName() + ", vmVendor="
+ runtime.getVmVendor() + ", vmVersion=" + runtime.getVmVersion());
LOG.info("vmInputArguments=" + runtime.getInputArguments());
}
}
public ServerStatus() {
OperatingSystemMXBean operatingSystemMXBean =
java.lang.management.ManagementFactory.getOperatingSystemMXBean();
ThreadMXBean threadMXBean = java.lang.management.ManagementFactory.getThreadMXBean();
RuntimeMXBean runtimeMXBean = java.lang.management.ManagementFactory.getRuntimeMXBean();
int cores = Runtime.getRuntime().availableProcessors();
long freeMemory = Runtime.getRuntime().freeMemory();
long totalMemory = Runtime.getRuntime().totalMemory();
String osArch = operatingSystemMXBean.getArch();
String osName = operatingSystemMXBean.getName();
String osVersion = operatingSystemMXBean.getVersion();
double loadAvg = operatingSystemMXBean.getSystemLoadAverage();
int threadCount = threadMXBean.getThreadCount();
long allThreadsCpuTime = 0L;
long[] threadIds = threadMXBean.getAllThreadIds();
for ( int i = 0; i < threadIds.length; i++ ) {
allThreadsCpuTime += threadMXBean.getThreadCpuTime( threadIds[i] );
}
long uptime = runtimeMXBean.getUptime();
setCpuCores( cores );
setCpuProcessTime( allThreadsCpuTime );
setUptime( uptime );
setThreadCount( threadCount );
setLoadAvg( loadAvg );
setOsName( osName );
setOsVersion( osVersion );
setOsArchitecture( osArch );
setMemoryFree( freeMemory );
setMemoryTotal( totalMemory );
}
/**
* Gets the version of the JVM in the form "VM_Name - Vendor - Spec/Version".
*
* @return The JVM version.
*/
public static String getJvmVersion() {
try {
final RuntimeMXBean bean = ManagementFactory.getRuntimeMXBean();
return bean.getVmName() + " - " + bean.getVmVendor() + " - " + bean.getSpecVersion() + '/' + bean.getVmVersion();
}
catch (Throwable t) {
return UNKNOWN;
}
}
@Test
public void sampleLog4Jtest() {
// Prints the jvm arguments. Must have "-DAPP_LOG_ROOT=c:/temp" --> location
// of the logs.-
RuntimeMXBean runtimeMXBean = ManagementFactory.getRuntimeMXBean();
List<String> jvmArgs = runtimeMXBean.getInputArguments();
System.out.println("jvm arguments: " + jvmArgs);
LOGGER.debug("Debug debugging message");
LOGGER.info("Info information message");
LOGGER.error("Error Message Logged !!!", new Exception("excepition"));
}
/**
* Gets the system parameters and environment parameters that were passed to the JVM on startup.
*
* @return The options passed to the JVM on startup.
*/
public static String[] getJvmStartupOptionsArray() {
try {
RuntimeMXBean bean = ManagementFactory.getRuntimeMXBean();
List<String> options = bean.getInputArguments();
return options.toArray(new String[options.size()]);
}
catch (Throwable t) {
return new String[0];
}
}
public static boolean isDebuggerAttached() {
final RuntimeMXBean runtimeMXBean = ManagementFactory.getRuntimeMXBean();
return runtimeMXBean.getInputArguments()
.stream()
.anyMatch(arg -> arg.contains("-agentlib:jdwp"));
}