java利用sigar监控服务器cpu、内存等性能值

前言

今天来了个需求,需要实时监控服务器cpu跟内存参数的占用百分比。

还没开始前首要想到的是用java执行linux命令:cat /proc/meminfo

这里面内存具体信息啥都有,查看cpu的话最常用的就是top+p。

想了一通下来,这样做出来好恶心啊...

sigar

搜了一下性能监控方面的资料,看到一个sigar,我之前没接触过sigar,看很多博文都把这个牛逼吹天上去了。

既然这么厉害,那就搞一下呗~

maven

<sigar.version>1.6.4</sigar.version>
<dependency>
    <groupId>org.fusesource</groupId>
    <artifactId>sigar</artifactId>
    <version>${sigar.version}</version>
</dependency>

引入需要的文件

这里插一嘴,因为sigar最恶心的一点就是需要用它的话。

windows就要在jdk的bin里面加上它的dll文件,linux也同样需要.so文件。

sigar的jar包及win、linux的dll文件.zip

这里开始直接就在加载类的时候把需要的都动态加到环境变量了,提前把需要的东西都集成到项目里。

sigarPackages

代码层实现


import com.mdm.skr.mdm_common.utils.PropertiesUtil;
import com.skr.mdm.projectBegin.ProjectBegin;
import org.hyperic.sigar.*;

import java.io.File;
import java.nio.file.Paths;
import java.text.DecimalFormat;

/**
 * 监控系统的工具类
 * @author 954
 */
public class SysStatusUtil {

    static {
        try {
            String classPath = SysStatusUtil.class.getClassLoader().getResource("").getPath().concat("sigarPackages");
            String path = System.getProperty("java.library.path");
            String osName = System.getProperty("os.name").toLowerCase();
            path += osName.contains("windows") ? ";".concat(classPath) :
                    osName.contains("linux") ? ":".concat(classPath) : "" ;
            System.setProperty("java.library.path", path);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 更新系统状态配置内容
     */
    public static void updateSysStatus() throws SigarException {
        SysStatusData statusData = new SysStatusData();
        CpuPerc perc = statusData.getPerc();
        // 获取cpu使用率
        String sysCpuUsed = CpuPerc.format(perc.getSys());
        // 获取内存使用率
        Mem mem = statusData.getMem();
        String sysMemoryUsed = new DecimalFormat("0.0%").format(
                Double.valueOf(mem.getUsed()) / Double.valueOf(mem.getTotal()));
        // 更改资源文件
        PropertiesUtil.setProperty("sysStatus","cpuUsed",sysCpuUsed) ;
        PropertiesUtil.setProperty("sysStatus","memoryUsed",sysMemoryUsed) ;
    }

}

import lombok.Getter;
import org.hyperic.sigar.*;

@Getter
public class SysStatusData {

    // cpu信息
    private CpuInfo info;
    private CpuPerc perc;
    private Cpu timer;
    private CpuPerc[] cpuPercList ;

    // 内存信息
    private Mem mem ;

    public SysStatusData() throws SigarException {
        Sigar sigar = new Sigar();
        this.info = sigar.getCpuInfoList()[0];
        this.perc = sigar.getCpuPerc();
        this.cpuPercList = sigar.getCpuPercList();
        this.timer = sigar.getCpu();
        this.mem = sigar.getMem() ;
    }

}

页面demo效果(经过测试,这个参数值还是挺准的)

sigar的强大可不仅仅是获取cpu跟内存这么鸡肋,强大到各种服务器性能网络状态以及硬盘等都给你扒出来,还是很好用的。

对你有帮助的话,右上角给个赞呗~

发布了61 篇原创文章 · 获赞 90 · 访问量 14万+

猜你喜欢

转载自blog.csdn.net/wkh___/article/details/90256962