Java获取系统、硬盘、内存、CPU信息

一、代码

1.1 MssMachineHardwareService
import cn.hutool.core.util.IdUtil;
import cn.hutool.system.OsInfo;
import cn.hutool.system.SystemUtil;
import cn.hutool.system.oshi.CpuInfo;
import cn.hutool.system.oshi.OshiUtil;
import com.akl.mss.dockAgent.common.utils.basic.StringUtils;
import com.akl.mss.dockAgent.common.utils.thread.pool.ThreadPoolAgent;
import com.akl.mss.dockAgent.mss.constant.MqttSendMethodConstant;
import com.akl.mss.dockAgent.mss.mqtt.MqttGateWay;
import com.akl.mss.dockAgent.mss.mqtt.model.MachineHardware;
import com.akl.mss.dockAgent.mss.service.MssMachineHardwareService;
import com.akl.mss.dockAgent.redis.QuickAccess;
import com.akl.mss.dockAgent.support.service.AgentMachineService;
import com.akl.mss.dockAgent.util.StringUtil;
import com.alibaba.fastjson2.JSONObject;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import oshi.hardware.GlobalMemory;

import javax.annotation.Resource;
import java.io.File;


@Slf4j
@Service
public class MssMachineHardwareService{

    public MachineHardware hardware() {
        MachineHardware hardwareInfo = new MachineHardware();
        hardwareInfo.setDockAgentSn(quickAccess.getDockAgentSn());

        //系统信息
        this.packOsInfo(hardwareInfo);

        //CPU信息
        this.packCpuInfo(hardwareInfo);

        //内存信息
        this.packRamInfo(hardwareInfo);

        this.packHardwareInfo(hardwareInfo);

        return hardwareInfo;
    }

    /**
     * 系统信息
     *
     * @param hardwareInfo
     */
    private void packOsInfo(MachineHardware hardwareInfo) {
        try {
            OsInfo osInfo = SystemUtil.getOsInfo();
            if (osInfo != null) {
                hardwareInfo.setOsSystem(osInfo.getName());
            }
        } catch (Exception e) {
            log.error("MssMachineHardwareServiceImpl.packOsInfo error={}", e.getMessage());
        }
    }

    /**
     * CPU信息
     *
     * @param hardwareInfo
     */
    private void packCpuInfo(MachineHardware hardwareInfo) {
        try {
            CpuInfo cpuInfo = OshiUtil.getCpuInfo();
            if (cpuInfo != null) {
                if (StringUtils.isNotNullOrBlank(cpuInfo.getCpuModel())) {
                    String cupModel = cpuInfo.getCpuModel().split("\\n")[0];
                    cupModel = cupModel.replaceAll("\\u0000","");
                    hardwareInfo.setCupModel(cupModel);
                }
                hardwareInfo.setCupUsed(cpuInfo.getUsed());
            }
        } catch (Exception e) {
            log.error("MssMachineHardwareServiceImpl.packCpuInfo error={}", e.getMessage());
        }
    }

    /**
     * 内存信息
     *
     * @param hardwareInfo
     */
    private void packRamInfo(MachineHardware hardwareInfo) {
        try {
            GlobalMemory globalMemory = OshiUtil.getMemory();
            if (globalMemory != null) {
                long totalMemory = globalMemory.getTotal();

                // 将总内存大小转换为 GB
                double totalMemoryGB = totalMemory / (double) (1024 * 1024 * 1024);
                double ramTotal = (int) totalMemoryGB;
                hardwareInfo.setRamTotal(ramTotal);

                // 获取当前内存使用率
                double memoryUsage = 1 - (double) globalMemory.getAvailable() / globalMemory.getTotal();
                double ramUsed = (int) (memoryUsage * 100);
                hardwareInfo.setRamUsed(ramUsed);
            }
        } catch (Exception e) {
            log.error("MssMachineHardwareServiceImpl.packRamInfo error={}", e.getMessage());
        }
    }

    /**
     * 硬盘信息
     *
     * @param hardwareInfo
     */
    private void packHardwareInfo(MachineHardware hardwareInfo) {
        try {
            File[] roots = File.listRoots();
            double hardwareTotal = 0;
            double hardwareAvailable = 0;
            for (File root : roots) {
                long totalSpace = root.getTotalSpace();
                long freeSpace = root.getFreeSpace();
                double totalSpaceG = totalSpace / (double) (1024 * 1024 * 1024);
                double freeSpaceG = freeSpace / (double) (1024 * 1024 * 1024);
                hardwareTotal = hardwareTotal + totalSpaceG;
                hardwareAvailable = hardwareAvailable + freeSpaceG;
            }

            hardwareTotal = (int) hardwareTotal;
            hardwareAvailable = (int) hardwareAvailable;
            hardwareInfo.setHardwareTotal(hardwareTotal);
            hardwareInfo.setHardwareAvailable(hardwareAvailable);
        } catch (Exception e) {
            log.error("MssMachineHardwareServiceImpl.packHardwareInfo error={}", e.getMessage());
        }
    }
}

1.2 MachineHardware
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class MachineHardware {

    private String dockAgentSn;

    private String osSystem; //操作系统

    private String cupModel; //CUP型号

    private double cupUsed; //CUP使用率

    private double ramTotal; //总内存

    private double ramUsed; //内存使用率

    private double hardwareTotal;// 硬盘总容量(单位G)

    private double hardwareAvailable;//剩余硬盘容量(单位G)
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容