jconsole上的进程的概述选项卡显示CPU使用率百分比。有没有给我这个值的MBean?它的ObjectName是什么?CPU使用率(%)Sun JVM上的MBean
11
A
回答
1
ManagementFactory中似乎没有直接的MBean。最接近的是http://java.sun.com/javase/6/docs/api/java/lang/management/OperatingSystemMXBean.html#getSystemLoadAverage(),它可以用来计算整个系统使用的CPU。
但是this URL has suggested a method基于JConsole的
17
更新的源代码:在Java 7,你可以做到这一点,像这样:
public static double getProcessCpuLoad() throws MalformedObjectNameException, ReflectionException, InstanceNotFoundException {
MBeanServer mbs = ManagementFactory.getPlatformMBeanServer();
ObjectName name = ObjectName.getInstance("java.lang:type=OperatingSystem");
AttributeList list = mbs.getAttributes(name, new String[]{ "ProcessCpuLoad" });
if (list.isEmpty()) return Double.NaN;
Attribute att = (Attribute)list.get(0);
Double value = (Double)att.getValue();
if (value == -1.0) return Double.NaN;
return ((int)(value * 1000)/10.0); // returns a percentage value with 1 decimal point precision
}
----- -----以下原
答案在Java 7中,可以使用的com.sun.management.OperatingSystemMXBean
隐藏方法:
getProcessCpuLoad() // returns the CPU usage of the JVM
getSystemCpuLoad() // returns the CPU usage of the whole system
这两个值都以0.0到1.0之间的双精度值返回,因此只需乘以100即可得到一个百分比。
com.sun.management.OperatingSystemMXBean osBean = ManagementFactory.getPlatformMXBean(OperatingSystemMXBean.class);
System.out.println(osBean.getProcessCpuLoad() * 100);
System.out.println(osBean.getSystemCpuLoad() * 100);
由于这些是隐藏的,无证,存在于com.sun.management.OperatingSystemMXBean
包中的方法,而不是在java.lang.management.OperatingSystemMXBean
是有风险的,他们将无法使用在某些JVM或在未来的更新,所以你应该决定,如果你”愿意承担风险与否。
0
我修改了一个代码,就像这样,然后我测试了一下,结果几乎与linux ps命令的结果相匹配。
/**下面是代码*/
public float getCpuUsed() {
/** get a MXBean */
com.sun.management.OperatingSystemMXBean osMXBean =
(com.sun.management.OperatingSystemMXBean)
ManagementFactory.getOperatingSystemMXBean();
/** set old timestamp values */
long previousJvmProcessCpuTime = osMXBean.getProcessCpuTime();
int sleepTime = 350;
/** sleep for a while to use to calculate */
try {
TimeUnit.MILLISECONDS.sleep(sleepTime);
} catch (InterruptedException e) {
logger.error("InterruptedException occurred while MemoryCollector sleeping...");
}
/** elapsed process time is in nanoseconds */
long elapsedProcessCpuTime = osMXBean.getProcessCpuTime() - previousJvmProcessCpuTime;
/** elapsed uptime is in milliseconds */
long elapsedJvmUptime = sleepTime ;
/** total jvm uptime on all the available processors */
//long totalElapsedJvmUptime = elapsedJvmUptime * osMXBean.getAvailableProcessors() ;
long totalElapsedJvmUptime = elapsedJvmUptime;
//System.out.println("echo cpu processors num " + osMXBean.getAvailableProcessors());
/** calculate cpu usage as a percentage value
to convert nanoseconds to milliseconds divide it by 1000000 and to get a percentage multiply it by 100 */
float cpuUsage = elapsedProcessCpuTime/(totalElapsedJvmUptime * 10000F);
return (float)(Math.round(cpuUsage*10)/10);
}
相关问题
- 1. 完整的GC - Sun JVM运行频率
- 2. Tomcat的JMX CPU使用率
- 3. JVM不能在Linux上使用8 CPU
- 4. CPU使用率( “”)
- 5. UNIX上的CPU利用率
- 6. Websphere CPU使用率
- 7. CPU使用率峰值6.1
- 8. CentOS CPU使用率
- 9. CPU使用率和CPU利用率之间的区别?
- 10. CPU使用率和Object.wait
- 11. Android。 CPU使用率太高
- 12. javaw.exe CPU使用率高
- 13. CPU使用率不同?
- 14. CPU使用率达到100%
- 15. Z3低cpu使用率
- 16. CakePHP 1.3:CPU使用率高
- 17. 的JMX MBean注册使用Spring在独立的JVM
- 18. wordpress中CPU使用率高
- 19. Java - 高CPU使用率
- 20. Android Socket高CPU使用率
- 21. Tomcat 100%CPU使用率
- 22. C++,CPU使用率过高
- 23. 计算总CPU使用率
- 24. Android - 内存/ CPU使用率
- 25. VMWare ESX/ESXi CPU使用率
- 26. 最大CPU使用率
- 27. CPU使用率问题
- 28. 壁画ControllerBuilder CPU使用率
- 29. 高mySQL cpu使用率
- 30. Scrapy高CPU使用率
不是(简单)的解决方案,我想,但似乎是唯一的出路。 – tuler 2010-06-16 14:40:43
注意,演员阵容是com.sun.management.OperatingSystemMXBean! – 2013-09-10 12:15:42
您给Java 7的作品的URL。'com.sun.management.OperatingSystemMXBean'不能用Java 6访问... – Matthieu 2015-05-14 12:13:26