小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。
前言
本节介绍RuoYi-Vue的ruoyi-admin模块中的服务器监控模块ServerController
部分的代码,这个接口主要用来展示服务器的情况
代码
public AjaxResult getInfo() throws Exception {
Server server = new Server();
server.copyTo();
return AjaxResult.success(server);
}
复制代码
所有的代码都在copyTo()方法中,调用了oshi-core
<dependency>
<groupId>com.github.oshi</groupId>
<artifactId>oshi-core</artifactId>
<version>${oshi.version}</version>
</dependency>
复制代码
oshi-core 是个第三方的获取硬件和系统信息的jar包。基于JNA
# 获取cpu信息
SystemInfo si = new SystemInfo();
HardwareAbstractionLayer hal = si.getHardware();
setCpuInfo(hal.getProcessor());
private void setCpuInfo(CentralProcessor processor)
{
// CPU信息
long[] prevTicks = processor.getSystemCpuLoadTicks();
Util.sleep(OSHI_WAIT_SECOND);
long[] ticks = processor.getSystemCpuLoadTicks();
long nice = ticks[TickType.NICE.getIndex()] - prevTicks[TickType.NICE.getIndex()];
long irq = ticks[TickType.IRQ.getIndex()] - prevTicks[TickType.IRQ.getIndex()];
long softirq = ticks[TickType.SOFTIRQ.getIndex()] - prevTicks[TickType.SOFTIRQ.getIndex()];
long steal = ticks[TickType.STEAL.getIndex()] - prevTicks[TickType.STEAL.getIndex()];
long cSys = ticks[TickType.SYSTEM.getIndex()] - prevTicks[TickType.SYSTEM.getIndex()];
long user = ticks[TickType.USER.getIndex()] - prevTicks[TickType.USER.getIndex()];
long iowait = ticks[TickType.IOWAIT.getIndex()] - prevTicks[TickType.IOWAIT.getIndex()];
long idle = ticks[TickType.IDLE.getIndex()] - prevTicks[TickType.IDLE.getIndex()];
long totalCpu = user + nice + cSys + idle + iowait + irq + softirq + steal;
cpu.setCpuNum(processor.getLogicalProcessorCount());
cpu.setTotal(totalCpu);
cpu.setSys(cSys);
cpu.setUsed(user);
cpu.setWait(iowait);
cpu.setFree(idle);
}
复制代码
IDLE
CPU闲置且系统没有未完成的磁盘 I/O 请求的时间
IOWAIT
CPU闲置且系统有未完成的磁盘 I/O 请求的时间,在windows里和macos里面不可用都是0。
IRQ(Hardware interrupts)
用于服务硬件中断的 CPU的时间,在macos中不可用,永远为0
NICE
在具有nice优先级的用户级别执行时发生的 CPU 使用率
nice指静态优先值,类unix系统中才有,一经设定,就不会被内核修改,直到被重新设定。
SOFTIRQ
用于服务软件中断的 CPU的时间
STEAL
操作系统分配给系统中其他用户的时间
SYSTEM
系统级别的cpu利用率
USER
用户级别的执行时cpu利用率
在使用Linux的Top命令的时候我们就可以看到上面的这些数据,网站直接在页面上展示有利于服务器数据的监控。
设置服务器信息
private void setSysInfo() {
Properties props = System.getProperties();
sys.setComputerName(IpUtils.getHostName());
sys.setComputerIp(IpUtils.getHostIp());
sys.setOsName(props.getProperty("os.name"));
sys.setOsArch(props.getProperty("os.arch"));
sys.setUserDir(props.getProperty("user.dir"));
}
复制代码
获取Java虚拟机信息
/**
* 设置Java虚拟机
*/
private void setJvmInfo() throws UnknownHostException
{
Properties props = System.getProperties();
jvm.setTotal(Runtime.getRuntime().totalMemory());
jvm.setMax(Runtime.getRuntime().maxMemory());
jvm.setFree(Runtime.getRuntime().freeMemory());
jvm.setVersion(props.getProperty("java.version"));
jvm.setHome(props.getProperty("java.home"));
}
复制代码
近期评论