java oshi如何查看cpu信息

网友投稿 365 2022-11-04

java oshi如何查看cpu信息

目录oshi查看cpu信息pom引入依赖测试类输出结果oshi获取cpu/内存使用率前十的进程CPU内存

oshi查看cpu信息

OSHI可以跨平台查看服务器信息,其中cpu负载信息为当前占用CPU的时间。需要在一段时间内获取两次,然后相减得出这段时间内所占用的时间。这段时间除以总占用时间就是占用百分比。

pom引入依赖

com.github.oshi

oshi-core

3.12.2

测试类

package io.greatcolin.jvmMessage;

import oshi.SystemInfo;

import oshi.hardware.CentralProcessor;

import oshi.hardware.GlobalMemory;

import java.text.DecimalFormat;

import java.util.Properties;

import java.util.concurrent.TimeUnit;

/**

* @author colin.cheng

* @version V1.0

* @date Created In 16:04 2019/8/16

*/

public class OshiTest {

public static void main(String[] args) {

while (true){

try {

OshiTest.printlnCpuInfo();

OshiTest.MemInfo();

OshiTest.getThread();

OshiTest.setSysInfo();

OshiTest.setJvmInfo();

TimeUnit.SECONDS.sleep(5);

}catch (Exception e){

e.printStackTrace();

}

}

}

private static void printlnCpuInfo() throws InterruptedException {

//System.out.println("----------------cpu信息----------------");

SystemInfo systemInfo = new SystemInfo();

CentralProcessor processor = systemInfo.getHardware().getProcessor();

long[] prevTicks = processor.getSystemCpuLoadTicks();

// 睡眠1s

TimeUnit.SECONDS.sleep(1);

long[] ticks = processor.getSystemCpuLoadTicks();

long nice = ticks[CentralProcessor.TickType.NICE.getIndex()] - prevTicks[CentralProcessor.TickType.NICE.getIndex()];

long irq = ticks[CentralProcessor.TickType.IRQ.getIndex()] - prevTicks[CentralProcessor.TickType.IRQ.getIndex()];

long softirq = ticks[CentralProcessor.TickType.SOFTIRQ.getIndex()] - prevTicks[CentralProcessor.TickType.SOFTIRQ.getIndex()];

long steal = ticks[CentralProcessor.TickType.STEAL.getIndex()] - prevTicks[CentralProcessor.TickType.STEAL.getIndex()];

long cSys = ticks[CentralProcessor.TickType.SYSTEM.getIndex()] - prevTicks[CentralProcessor.TickType.SYSTEM.getIndex()];

long user = ticks[CentralProcessor.TickType.USER.getIndex()] - prevTicks[CentralProcessor.TickType.USER.getIndex()];

long iowait = ticks[CentralProcessor.TickType.IOWAIT.getIndex()] - prevTicks[CentralProcessor.TickType.IOWAIT.getIndex()];

long idle = ticks[CentralProcessor.TickType.IDLE.getIndex()] - prevTicks[CentralProcessor.TickType.IDLE.getIndex()];

long totalCpu = user + nice + cSys + idle + iowait + irq + softirq + steal;

System.out.println("----------------cpu信息----------------");

System.out.println("cpu核数:" + processor.getLogicalProcessorCount());

System.out.println("cpu系统使用率:" + new DecimalFormat("#.##%").format(cSys * 1.0 / totalCpu));

System.out.println("cpu用户使用率:" + new DecimalFormat("#.##%").format(user * 1.0 / totalCpu));

System.out.println("cpu当前等待率:" + new DecimalFormat("#.##%").format(iowait * 1.0 / totalCpu));

System.out.println("cpu当前使用率:" + new DecimalFormat("#.##%").format(1.0-(idle * 1.0 / totalCpu)));

}

public static void MemInfo(){

System.out.println("----------------主whNNneg机内存信息----------------");

SystemInfo systemInfo = new SystemInfo();

GlobalMemory memory = systemInfo.getHardware().getMemory();

//总内存

long totalByte = memory.getTotal();

//剩余

long acaliableByte = memory.getAvailable();

System.out.println("总内存 = " + formatByte(totalByte));

System.out.println("使用" + formatByte(totalByte-acaliableByte));

System.out.println("剩余内存 = " + formatByte(acaliableByte));

System.out.println("使用率:" + new DecimalFormat("#.##%").format((totalByte-acaliableByte)*1.0/totalByte));

}

public static void setSysInfo(){

System.out.println("----------------操作系统信息----------------");

Properties props = System.getProperties();

//系统名称

String osName = props.getProperty("os.name");

//架构名称

String osArch = props.getProperty("os.arch");

System.out.println("操作系统名 = " + osName);

System.out.println("系统架构 = " + osArch);

}

public static void setJvmInfo(){

System.out.println("----------------jvm信息----------------");

Properties props = System.getProperties();

Runtime runtime = Runtime.getRuntime();

//jvm总内存

long jvmTotalMemoryByte = runtime.totalMemory();

//jvm最大可申请

long jvmMaxMoryByte = runtime.maxMemory();

//空闲空间

long freeMemoryByte = runtime.freeMemory();

//jdk版本

String jdkVersion = props.getProperty("java.version");

//jdk路径

String jdkHome = props.getProperty("java.home");

System.out.println("jvm内存总量 = " + formatByte(jvmTotalMemoryByte));

System.out.println("jvm已使用内存 = " + formatByte(jvmTotalMemoryByte-freeMemoryByte));

System.out.println("jvm剩余内存 = " + formatByte(freeMemoryByte));

System.out.println("jvm内存使用率 = " + new DecimalFormat("#.##%").format((jvmTotalMemoryByte-freeMemoryByte)*1.0/jvmTotalMemoryByte));

System.out.println("java版本 = " + jdkVersion);

//System.out.println("jdkHome = " + jdkHome);

}

public static void getThread(){

System.out.println("----------------线程信息----------------");

ThreadGroup currentGroup =Thread.currentThread().getThreadGroup();

while (currentGroup.getParent()!=null){

// 返回此线程组的父线程组

currentGroup=currentGroup.getParent();

}

//此线程组中活动线程的估计数

int noThreads = currentGrwhNNnegoup.activeCount();

Thread[] lstThreads = new Thread[noThreads];

//把对此线程组中的所有活动子组的引用复制到指定数组中。

currentGroup.enumerate(lstThreads);

for (Thread thread : lstThreads) {

System.out.println("线程数量:"+noThreads+" 线程id:" + thread.getId() + " 线程名称:" + thread.getName() + " 线程状态:" + thread.getState());

}

}

public static String formatByte(long byteNumber){

//换算单位

double FORMAT = 1024.0;

double kbNumber = byteNumber/FORMAT;

if(kbNumber

return new DecimalFormat("#.##KB").format(kbNumber);

}

double mbNumber = kbNumber/FORMAT;

if(mbNumber

return new DecimalFormat("#.##MB").format(mbNumber);

}

double gbNumber = mbNumber/FORMAT;

if(gbNumber

return new DecimalFormat("#.##GB").format(gbNumber);

}

double tbNumber = gbNumber/FORMAT;

return new DecimalFormat("#.##TB").format(tbNumber);

}

}

输出结果

# 没添加slf4j的依赖,不影响SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".SLF4J: Defaulting to no-operation (NOP) logger implementationSLF4J: See http://slf4j.org/codes.html#StaticLoggerBinder for further details.----------------cpu信息----------------cpu核数:4cpu系统使用率:1.88%cpu用户使用率:2.73%cpu当前等待率:0%cpu当前使用率:4.71%----------------主机内存信息---------------whNNneg-总内存 = 7.88GB使用5.89GB剩余内存 = 1.99GB使用率:74.72%----------------线程信息----------------线程数量:5 线程id:2 线程名称:Reference Handler 线程状态:WAITING线程数量:5 线程id:3 线程名称:Finalizer 线程状态:WAITING线程数量:5 线程id:4 线程名称:Signal Dispatcher 线程状态:RUNNABLE线程数量:5 线程id:5 线程名称:Attach Listener 线程状态:RUNNABLE线程数量:5 线程id:1 线程名称:main 线程状态:RUNNABLE----------------操作系统信息----------------操作系统名 = Windows 7系统架构 = amd64----------------jvm信息----------------jvm内存总量 = 123MBjvm已使用内存 = 20.46MBjvm剩余内存 = 102.54MBjvm内存使用率 = 16.64%java版本 = 1.8.0_65

oshi获取cpu/内存使用率前十的进程

CPU

@Override

public void getFirstCpuUsed() {

OperatingSystem windowsOperatingSystem = new WindowsOperatingSystem();

List processList = windowsOperatingSystem.getProcesses(10, OperatingSystem.ProcessSort.CPU);

for (OSProcess process : processList) {

//进程名,进程ID,进程CPU使用率

System.out.println(String.format("name:%s PID: %d CPU:%.3f",

process.getName(),process.getProcessID(),

process.getProcessCpuLoadCumulative()));

}

}

内存

public void getFirstMemUsed(){

OperatingSystem windowsOperatingSystem = new WindowsOperatingSystem();

List processList = windowsOperatingSystem.getProcesses(10, OperatingSystem.ProcessSort.MEMORY);

for (OSProcess process : processList) {

//进程名,京城ID,进程CPU使用率

System.out.println(String.format("name:%s PID: %d CPU:%.3f",

process.getName(),process.getProcessID(),

process.getProcessCpuLoadCumulative()));

}

}

return new DecimalFormat("#.##KB").format(kbNumber);

}

double mbNumber = kbNumber/FORMAT;

if(mbNumber

return new DecimalFormat("#.##MB").format(mbNumber);

}

double gbNumber = mbNumber/FORMAT;

if(gbNumber

return new DecimalFormat("#.##GB").format(gbNumber);

}

double tbNumber = gbNumber/FORMAT;

return new DecimalFormat("#.##TB").format(tbNumber);

}

}

输出结果

# 没添加slf4j的依赖,不影响SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".SLF4J: Defaulting to no-operation (NOP) logger implementationSLF4J: See http://slf4j.org/codes.html#StaticLoggerBinder for further details.----------------cpu信息----------------cpu核数:4cpu系统使用率:1.88%cpu用户使用率:2.73%cpu当前等待率:0%cpu当前使用率:4.71%----------------主机内存信息---------------whNNneg-总内存 = 7.88GB使用5.89GB剩余内存 = 1.99GB使用率:74.72%----------------线程信息----------------线程数量:5 线程id:2 线程名称:Reference Handler 线程状态:WAITING线程数量:5 线程id:3 线程名称:Finalizer 线程状态:WAITING线程数量:5 线程id:4 线程名称:Signal Dispatcher 线程状态:RUNNABLE线程数量:5 线程id:5 线程名称:Attach Listener 线程状态:RUNNABLE线程数量:5 线程id:1 线程名称:main 线程状态:RUNNABLE----------------操作系统信息----------------操作系统名 = Windows 7系统架构 = amd64----------------jvm信息----------------jvm内存总量 = 123MBjvm已使用内存 = 20.46MBjvm剩余内存 = 102.54MBjvm内存使用率 = 16.64%java版本 = 1.8.0_65

oshi获取cpu/内存使用率前十的进程

CPU

@Override

public void getFirstCpuUsed() {

OperatingSystem windowsOperatingSystem = new WindowsOperatingSystem();

List processList = windowsOperatingSystem.getProcesses(10, OperatingSystem.ProcessSort.CPU);

for (OSProcess process : processList) {

//进程名,进程ID,进程CPU使用率

System.out.println(String.format("name:%s PID: %d CPU:%.3f",

process.getName(),process.getProcessID(),

process.getProcessCpuLoadCumulative()));

}

}

内存

public void getFirstMemUsed(){

OperatingSystem windowsOperatingSystem = new WindowsOperatingSystem();

List processList = windowsOperatingSystem.getProcesses(10, OperatingSystem.ProcessSort.MEMORY);

for (OSProcess process : processList) {

//进程名,京城ID,进程CPU使用率

System.out.println(String.format("name:%s PID: %d CPU:%.3f",

process.getName(),process.getProcessID(),

process.getProcessCpuLoadCumulative()));

}

}

return new DecimalFormat("#.##MB").format(mbNumber);

}

double gbNumber = mbNumber/FORMAT;

if(gbNumber

return new DecimalFormat("#.##GB").format(gbNumber);

}

double tbNumber = gbNumber/FORMAT;

return new DecimalFormat("#.##TB").format(tbNumber);

}

}

输出结果

# 没添加slf4j的依赖,不影响SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".SLF4J: Defaulting to no-operation (NOP) logger implementationSLF4J: See http://slf4j.org/codes.html#StaticLoggerBinder for further details.----------------cpu信息----------------cpu核数:4cpu系统使用率:1.88%cpu用户使用率:2.73%cpu当前等待率:0%cpu当前使用率:4.71%----------------主机内存信息---------------whNNneg-总内存 = 7.88GB使用5.89GB剩余内存 = 1.99GB使用率:74.72%----------------线程信息----------------线程数量:5 线程id:2 线程名称:Reference Handler 线程状态:WAITING线程数量:5 线程id:3 线程名称:Finalizer 线程状态:WAITING线程数量:5 线程id:4 线程名称:Signal Dispatcher 线程状态:RUNNABLE线程数量:5 线程id:5 线程名称:Attach Listener 线程状态:RUNNABLE线程数量:5 线程id:1 线程名称:main 线程状态:RUNNABLE----------------操作系统信息----------------操作系统名 = Windows 7系统架构 = amd64----------------jvm信息----------------jvm内存总量 = 123MBjvm已使用内存 = 20.46MBjvm剩余内存 = 102.54MBjvm内存使用率 = 16.64%java版本 = 1.8.0_65

oshi获取cpu/内存使用率前十的进程

CPU

@Override

public void getFirstCpuUsed() {

OperatingSystem windowsOperatingSystem = new WindowsOperatingSystem();

List processList = windowsOperatingSystem.getProcesses(10, OperatingSystem.ProcessSort.CPU);

for (OSProcess process : processList) {

//进程名,进程ID,进程CPU使用率

System.out.println(String.format("name:%s PID: %d CPU:%.3f",

process.getName(),process.getProcessID(),

process.getProcessCpuLoadCumulative()));

}

}

内存

public void getFirstMemUsed(){

OperatingSystem windowsOperatingSystem = new WindowsOperatingSystem();

List processList = windowsOperatingSystem.getProcesses(10, OperatingSystem.ProcessSort.MEMORY);

for (OSProcess process : processList) {

//进程名,京城ID,进程CPU使用率

System.out.println(String.format("name:%s PID: %d CPU:%.3f",

process.getName(),process.getProcessID(),

process.getProcessCpuLoadCumulative()));

}

}

return new DecimalFormat("#.##GB").format(gbNumber);

}

double tbNumber = gbNumber/FORMAT;

return new DecimalFormat("#.##TB").format(tbNumber);

}

}

输出结果

# 没添加slf4j的依赖,不影响SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".SLF4J: Defaulting to no-operation (NOP) logger implementationSLF4J: See http://slf4j.org/codes.html#StaticLoggerBinder for further details.----------------cpu信息----------------cpu核数:4cpu系统使用率:1.88%cpu用户使用率:2.73%cpu当前等待率:0%cpu当前使用率:4.71%----------------主机内存信息---------------whNNneg-总内存 = 7.88GB使用5.89GB剩余内存 = 1.99GB使用率:74.72%----------------线程信息----------------线程数量:5 线程id:2 线程名称:Reference Handler 线程状态:WAITING线程数量:5 线程id:3 线程名称:Finalizer 线程状态:WAITING线程数量:5 线程id:4 线程名称:Signal Dispatcher 线程状态:RUNNABLE线程数量:5 线程id:5 线程名称:Attach Listener 线程状态:RUNNABLE线程数量:5 线程id:1 线程名称:main 线程状态:RUNNABLE----------------操作系统信息----------------操作系统名 = Windows 7系统架构 = amd64----------------jvm信息----------------jvm内存总量 = 123MBjvm已使用内存 = 20.46MBjvm剩余内存 = 102.54MBjvm内存使用率 = 16.64%java版本 = 1.8.0_65

oshi获取cpu/内存使用率前十的进程

CPU

@Override

public void getFirstCpuUsed() {

OperatingSystem windowsOperatingSystem = new WindowsOperatingSystem();

List processList = windowsOperatingSystem.getProcesses(10, OperatingSystem.ProcessSort.CPU);

for (OSProcess process : processList) {

//进程名,进程ID,进程CPU使用率

System.out.println(String.format("name:%s PID: %d CPU:%.3f",

process.getName(),process.getProcessID(),

process.getProcessCpuLoadCumulative()));

}

}

内存

public void getFirstMemUsed(){

OperatingSystem windowsOperatingSystem = new WindowsOperatingSystem();

List processList = windowsOperatingSystem.getProcesses(10, OperatingSystem.ProcessSort.MEMORY);

for (OSProcess process : processList) {

//进程名,京城ID,进程CPU使用率

System.out.println(String.format("name:%s PID: %d CPU:%.3f",

process.getName(),process.getProcessID(),

process.getProcessCpuLoadCumulative()));

}

}

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Kubernets 亲和性
下一篇:【i.MX6ULL】驱动开发6——GPIO子系统点亮LED
相关文章

 发表评论

暂时没有评论,来抢沙发吧~