java計算線程cpu使用率(不借助native方法版)

jconsole中自帶了進程的cpu使用率,閱讀源碼後,我移植到線程上了。java

算法

如下jconsole是進程cpu計算的代碼算法

   float cpuUsage = Math.min(99F,elapsedCpu / (elapsedTime * 10000F * result.nCPUs));

elapsedCpu是一段時間進程佔用cpu的時間jvm

elapsedTime是Java 虛擬機的正常運行時間只差spa

nCPUs是jvm可用的cpu數量線程

進程cpu的利用率=進程時間差/(jvm運行時間差)*可用的cpu數量code

獲取手段

線程的cpu時間ThreadMXBean的getThreadCpuTime進程

jvm運行時間RuntimeMXBean的getUptimeget

jvm可用的核心數OperatingSystemMXBean的getAvailableProcessors源碼

一切都ok了,這個算法雖然感受怪怪的,可是結果靠得住,想一想jvm假如可以合理利用cpu,那麼這個算法是能等同於各個cpu運行時間之和。
虛擬機

相關文章
相關標籤/搜索