文档章节

使用Sigar获取服务器内存、IP、CPU、IO、MAC地址、操作系统等信息...

久伴诗与远方
 久伴诗与远方
发布于 06/21 13:46
字数 953
阅读 41
收藏 0

sigar linux 文件和windows文件和sigar的jar包

链接: https://pan.baidu.com/s/1bGrupzmaOAjLEUE0gp6DmA 提取码: gj31

工具类

import com.sun.management.OperatingSystemMXBean;
import org.hyperic.sigar.*;

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.lang.management.ManagementFactory;
import java.math.BigDecimal;
import java.net.InetAddress;
import java.net.NetworkInterface;
import java.net.SocketException;
import java.text.DecimalFormat;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Map;
import java.util.StringTokenizer;

public class MachineUtils {

    private static String osName = System.getProperty("os.name");
    /***
     * 获取cpu平均值使用率
     */
    public static Double getCPURate() {
        Double CPURate = 0.0;
        Double CPURate1 = 0.0;
        try {
            Sigar sigar = new Sigar();
            CpuInfo infos[] = new CpuInfo[0];
            infos = sigar.getCpuInfoList();
            CpuPerc cpuList[] = null;
            cpuList = sigar.getCpuPercList();
            for (int i = 0; i < infos.length; i++) {// 不管是单块CPU还是多CPU都适用
                CpuInfo info = infos[i];
                CPURate += cpuList[i].getCombined();
            }
            CPURate1 = CPURate / infos.length;
        } catch (SigarException e) {
            e.printStackTrace();
        }
        CPURate1 = (double) Math.round(CPURate1 * 100);
        return CPURate1;
    }

    /***
     *  获取内存使用率
     */
    public static String Memory(){
        if (osName.toLowerCase().contains("windows") || osName.toLowerCase().contains("win")) {
            String memory = getMemery();
            return memory;
        } else {
            String memory = getMemUsage()+"";
            return memory;
        }
    }
    /**
     * 获取windows内存使用率
     */
    public static String getMemery() {
        String format = "";
        try {
            DecimalFormat df = new DecimalFormat("#.00");
            Sigar sigar = new Sigar();
            Mem mem = sigar.getMem();
            float total = mem.getTotal() / 1024L;
            float used = mem.getUsed() / 1024L;
            format = df.format((used/total)*100);
            return  format;
        } catch (SigarException e) {
            e.printStackTrace();
        }
        return  format;
    }
    /***
     * 获取linux内存使用率
     */
    public static String getMemUsage() {
            Map<String, Object> map = new HashMap<String, Object>();
            InputStreamReader inputs = null;
            BufferedReader buffer = null;
            try {
                inputs = new InputStreamReader(new FileInputStream("/proc/meminfo"));
                buffer = new BufferedReader(inputs);
                String line = "";
                while (true) {
                    line = buffer.readLine();
                    if (line == null)
                        break;
                    int beginIndex = 0;
                    int endIndex = line.indexOf(":");
                    if (endIndex != -1) {
                        String key = line.substring(beginIndex, endIndex);
                        beginIndex = endIndex + 1;
                        endIndex = line.length();
                        String memory = line.substring(beginIndex, endIndex);
                        String value = memory.replace("kB", "").trim();
                        map.put(key, value);
                    }
                }
                long memTotal = Long.parseLong(map.get("MemTotal").toString());
                long memFree = Long.parseLong(map.get("MemFree").toString());
                long memused = memTotal - memFree;
                long buffers = Long.parseLong(map.get("Buffers").toString());
                long cached = Long.parseLong(map.get("Cached").toString());
                double usage = (double) (memused-buffers-cached) / memTotal * 100;
                DecimalFormat df = new DecimalFormat("#.00");
                String format = df.format(usage);
                return format;
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                try {
                    buffer.close();
                    inputs.close();
                } catch (Exception e2) {
                    e2.printStackTrace();
                }
            }
        return "0";
    }
/**
 * 获取磁盘Read吞吐量
 *
 * @return
 */
public static long getTotalDiskReadByte() {
    Sigar sigar = new Sigar();
    long totalByte = 0;
    try {
        FileSystem[] fslist = sigar.getFileSystemList();
        for (int i = 0; i < fslist.length; i++) {
            if (fslist[i].getType() == 2) {
                FileSystemUsage usage = sigar.getFileSystemUsage(fslist[i].getDirName());
                totalByte += usage.getDiskReadBytes();
            }
        }
    } catch (SigarException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    return totalByte;
}
/**
 * 获取磁盘Write吞吐量
 *
 * @return
 */
public static long getTotalDiskWriteByte() {
    Sigar sigar = new Sigar();
    long totalByte = 0;
    try {
        FileSystem[] fslist = sigar.getFileSystemList();
        for (int i = 0; i < fslist.length; i++) {
            if (fslist[i].getType() == 2) {
                FileSystemUsage usage = sigar.getFileSystemUsage(fslist[i].getDirName());
                totalByte += usage.getDiskWriteBytes();
            }
        }
    } catch (SigarException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    return totalByte;
}    
/**
     * @Description: 系统上传下载总量
     * @Date:
     */
    public static String[] getOBytes() {
        Sigar sigar = new Sigar();
        String ifNames[] = null;
        String[] arr = new String[2];

        long txbyte = 0;
        long rxbyte = 0;
        try {
            //获取网卡名称
            ifNames = sigar.getNetInterfaceList();
            for (int i = 0; i < ifNames.length; i++) {
                String name = ifNames[i];
                NetInterfaceStat ifstat = sigar.getNetInterfaceStat(name);//fasong
                long txBytes = ifstat.getTxBytes();
                long rxBytes = ifstat.getRxBytes();
                if (txBytes != 0 && !"lo".equals(name)) {
                    txbyte += txBytes;
                    rxbyte += rxBytes;

                }
            }
            arr[0] = bytes2kb(rxbyte);
            arr[1] = bytes2kb(txbyte);
        } catch (Exception e2) {
            e2.printStackTrace();
        }
        return arr;
    }

    //long byte转Kb
    public static String bytes2kb(long bytes) {
        DecimalFormat df = new DecimalFormat("#.00");
        return df.format((double) bytes / 1024);
    }

    public static long getAllDiskReadSpeed() {
        Sigar sigar = new Sigar();
        FileSystem fslist[] = new FileSystem[0];
        long DiskReads = 0;
        try {
            fslist = sigar.getFileSystemList();

            for (int i = 0; i < fslist.length; i++) {
                FileSystem fs = fslist[i];
                FileSystemUsage usage = null;
                usage = sigar.getFileSystemUsage(fs.getDirName());
                DiskReads += usage.getDiskReads();
            }
        } catch (SigarException e) {
            e.printStackTrace();
        }

        return DiskReads / fslist.length;
    }

    public static long getAllDiskWriteSpeed() {
        Sigar sigar = new Sigar();
        long DiskWrites = 0;
        FileSystem fslist[] = new FileSystem[0];
        try {
            fslist = sigar.getFileSystemList();
            for (int i = 0; i < fslist.length; i++) {
                FileSystem fs = fslist[i];
                FileSystemUsage usage = null;
                usage = sigar.getFileSystemUsage(fs.getDirName());
                DiskWrites += usage.getDiskWrites();
            }
        } catch (SigarException e) {
            e.printStackTrace();
        }
        return DiskWrites / fslist.length;
    }

    public static String CompIp() {
        String ip = "";
        Enumeration<NetworkInterface> IFaces = null;
        try {
            IFaces = NetworkInterface.getNetworkInterfaces();
            while (IFaces.hasMoreElements()) {
                NetworkInterface fInterface = IFaces.nextElement();
                if (!fInterface.isVirtual() && !fInterface.isLoopback() && fInterface.isUp()) {
                    Enumeration<InetAddress> adds = fInterface.getInetAddresses();
                    while (adds.hasMoreElements()) {
                        InetAddress address = adds.nextElement();
                        byte[] bs = address.getAddress();
                        if (bs.length == 4)
                            ip += address.getHostAddress() + ",";
                    }
                }
            }
        } catch (SocketException e) {
            e.printStackTrace();
        }
        return ip.substring(0, ip.length() - 1);
    }

    public static void main(String[] args){
    }
}
float R = 0.00f;
float T = 0.00f;
float write = 0.00f;
float read = 0.00f;
Monitor monitor = new Monitor();
String updataTime = DateFormatUtils.format(new Date(), "yyyy/MM/dd HH:mm:ss");
monitor.setCPUCOL((int) Math.round(MachineUtils.getCPURate()));//CPU
monitor.setMemoryCOL(Float.parseFloat(MachineUtils.Memory()));//内存
if (readSpeed != 0) {
    float as = (MachineUtils.getTotalDiskReadByte() - readSpeed) / 5;
    BigDecimal b = new BigDecimal(as /1024 /1024);
    read = b.setScale(2, BigDecimal.ROUND_HALF_UP).floatValue();
}
if (writeSpeed != 0) {
    float as = (MachineUtils.getTotalDiskWriteByte() - writeSpeed) / 5;
    BigDecimal b = new BigDecimal(as /1024 /1024);
    write = b.setScale(2, BigDecimal.ROUND_HALF_UP).floatValue();
}

monitor.setTotalReadSpeedCOL(read);//所有磁盘读取速度
monitor.setTotalWriteSpeedCOL(write);//所有磁盘写入速度
String[] oBytes = MachineUtils.getOBytes();
float down = Float.parseFloat(oBytes[0]);
float up = Float.parseFloat(oBytes[1]);
if (lastRBytes != 0) {
    float as = (down - lastRBytes) / 5;
    R = (float) (Math.round(as * 100)) / 100;//*100   然后   /100 是保留两位
}
if (lastTBytes != 0) {
    float as = (up - lastTBytes) / 5;
    T = (float) (Math.round(as * 100)) / 100;
}
lastRBytes = down;//下载
lastTBytes = up;//上传
readSpeed = MachineUtils.getTotalDiskReadByte();
writeSpeed = MachineUtils.getTotalDiskWriteByte();

博客链接

https://blog.csdn.net/wudiazu/article/details/73829324

sigar官网地址:

https://sourceforge.net/projects/sigar/

本文转载自:https://blog.csdn.net/wudiazu/article/details/73829324

久伴诗与远方
粉丝 2
博文 109
码字总数 26171
作品 0
杭州
后端工程师
私信 提问
系统监控软件--Sigar-System_Runtime

介绍 利用java程序检查服务器或主机的运行时信息,包括操作系统、CPU使用情况、内存使用情况、硬盘使用情况以及网卡、网络信息。主要的办法有两种:第一种,使用jdk1.6以上自动的功能,实现数...

匿名
2016/03/31
3K
0
系统信息收集API Sigar

Sigar简介 Sigar(System Information Gatherer And Reporter),是一个开源的工具,提供了跨平台的系统信息收集的API,核心由C语言实现的。 可以被以下语音调用: C/C++ Java (sigar.jar au...

白志华
2015/12/05
1K
0
系统信息收集API--Sigar

Sigar(System Information Gatherer And Reporter),是一个开源的工具,提供了跨平台的系统信息收集的API,核心由C语言实现的。 可以被以下语音调用: C/C++ Java (sigar.jar auto-loads t...

匿名
2011/02/17
17.7K
0
阿里云技术教程系列-ECS使用须知

内容提示:阿里云ECS使用须知 为了保证您云服务器 ECS 实例的正常运行,在使用之前,务必认真阅读以下注意事项。 操作须知 禁忌 禁止用户使用 ECS 实例做流量穿透服务。违规者最高处以关停并...

嘿嘿!!
2017/11/12
0
0
Python网络编程(weekly summary1)

网络的目的是什么? 用于信息传输、接受 能把各个点、面、体的信息链接到一起 实现资源的共享 OSI模型: 应用层:提供程序服务 表示层:数据加密、优化、压缩 会话层:建立链接、传输服务 传...

巴黎香榭
2018/08/12
0
0

没有更多内容

加载失败,请刷新页面

加载更多

PCB设计-Allegro软件入门系列-铺铜操作(下)

铺铜是PCB很常见的操作,PCB的敷铜一般都是覆地铜,增大地线面积,有利于地线阻抗降低,使电源和信号传输稳定,在高频的信号线附近敷铜,可大大减少电磁辐射干扰,起屏蔽作用。 本讲讲解啊一...

demyar
28分钟前
4
0
如何通过WASI SDK 在Linux上编译ZXing C++

Mozilla在今年三月份的时候公布了WASI。WASI的目标就是让WebAssembly在任何地方都可以运行,而不仅仅像现在这样只能运行在Node.js和Web浏览器中。WASI目前依然处于初级阶段,这篇文章分享下如...

yushulx
29分钟前
3
0
.Net界面开发神器—DevExpress官方汉化包免费下载!还在等什么?

点击获取DevExpress v19.1.7新版试用下载 DevExpress Localization Service允许您创建一组自定义的附属程序集,要将语言包添加到程序集中,请查看本文中为大家列出的对应版本的汉化包,下载并...

FILA6666
30分钟前
4
0
php生成二维码

        header('Content-Type: image/png');        //清除缓冲区,防止之前面不知道的情况下被加头部信息导致不显示图片内容        ob_clean();        $...

横着走的螃蟹
35分钟前
3
0
伪类和伪元素

伪类和伪元素 伪类和伪元素,对于绝大多数同学来说,都是耳熟能详的名字,但确实又有很多人搞不清楚它们之间的区别,以致于混淆概念。而当概念都混淆的时候,也往往意味着你不会经常使用它,...

不负好时光
37分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部