JAVA如何利用Swiger获取Linux系统电脑配置相关信息

JAVA如何利用Swiger获取Linux系统电脑配置相关信息
最近开发java应用程序,涉及到获取Linux服务器相关配置的问题,特地网上搜寻了下,采用Swiger包可以直接获取,再次小结一下,以便于以后能方便使用,也便于其他童鞋们学习。

推荐大家参考链接:https://www.cnblogs.com/kabi/p/5209315.html

值得注意的问题是:

1.如果是Linux的环境下,要把libsigar-amd64-linux.so文件存放到 lib64下面才能起到作用。

2.如果是Windos环境,将对应的文件存放到jdk的安装目录的bin目录下面即可。

项目中自己封装的工具类代码,大家可参考使用:

复制代码
package com.xuanyin.common;

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.StringTokenizer;

import org.hyperic.sigar.CpuInfo;
import org.hyperic.sigar.CpuPerc;
import org.hyperic.sigar.FileSystem;
import org.hyperic.sigar.FileSystemUsage;
import org.hyperic.sigar.Mem;
import org.hyperic.sigar.NetInterfaceConfig;
import org.hyperic.sigar.NetInterfaceStat;
import org.hyperic.sigar.Sigar;
import org.hyperic.sigar.SigarException;

import net.sf.json.JSONObject;
/**

  • 此类用户获取Linux服务器配置信息
  • @author Administrator

/
public class LinuxSystem {
public static Sigar sigar = new Sigar();
/
*
* 功能:获取Linux系统cpu使用率
* */
public static int cpuUsage() {
try {
Map<?, ?> map1 = cpuinfo();
Thread.sleep(500);
Map<?, ?> map2 = cpuinfo();
if(map1.size() > 0 && map2.size() > 0){
long user1 = Long.parseLong(map1.get(“user”).toString());
long nice1 = Long.parseLong(map1.get(“nice”).toString());
long system1 = Long.parseLong(map1.get(“system”).toString());
long idle1 = Long.parseLong(map1.get(“idle”).toString());

            long user2 = Long.parseLong(map2.get("user").toString());
            long nice2 = Long.parseLong(map2.get("nice").toString());
            long system2 = Long.parseLong(map2.get("system").toString());
            long idle2 = Long.parseLong(map2.get("idle").toString());

            long total1 = user1 + system1 + nice1;
            long total2 = user2 + system2 + nice2;
            float total = total2 - total1;

            long totalIdle1 = user1 + nice1 + system1 + idle1;
            long totalIdle2 = user2 + nice2 + system2 + idle2;
            float totalidle = totalIdle2 - totalIdle1;

            float cpusage = (total / totalidle) * 100;
            return (int) cpusage;
        }

    } catch (InterruptedException e) {
        e.printStackTrace();
    }
    return 0;
}

/**
 * 功能:CPU使用信息
 * */
public static Map<?, ?> cpuinfo() {
    InputStreamReader inputs = null;
    BufferedReader buffer = null;
    Map<String, Object> map = new HashMap<String, Object>();
    try {
        inputs = new InputStreamReader(new FileInputStream("/proc/stat"));
        buffer = new BufferedReader(inputs);
        String line = "";
        while (true) {
            line = buffer.readLine();
            if (line == null) {
                break;
            }
            if (line.startsWith("cpu")) {
                StringTokenizer tokenizer = new StringTokenizer(line);
                List<String> temp = new ArrayList<String>();
                while (tokenizer.hasMoreElements()) {
                    String value = tokenizer.nextToken();
                    temp.add(value);
                }
                map.put("user", temp.get(1));
                map.put("nice", temp.get(2));
                map.put("system", temp.get(3));
                map.put("idle", temp.get(4));
                map.put("iowait", temp.get(5));
                map.put("irq", temp.get(6));
                map.put("softirq", temp.get(7));
                map.put("stealstolen", temp.get(8));
                break;
            }
        }
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        try {
            if(buffer != null && inputs != null){
                buffer.close();
                inputs.close();
            }
        } catch (Exception e2) {
            e2.printStackTrace();
        }
    }
    return map;
}

/**
 * huoqu CPU信息
 * @throws SigarException 
 */
public static JSONObject getCpuInformation() throws SigarException {
    CpuInfo infos[] = sigar.getCpuInfoList();
    CpuPerc cpuList[] = sigar.getCpuPercList();
    JSONObject jsonObject = new JSONObject();
    jsonObject.put("type",infos[0].getVendor() + "  " + infos[0].getModel());
    jsonObject.put("sys",CpuPerc.format(cpuList[0].getSys()));
    jsonObject.put("use",CpuPerc.format(cpuList[0].getUser()));
    jsonObject.put("total",CpuPerc.format(cpuList[0].getCombined()));
    //        jsonObject.put("total",CpuPerc.format(cpuUsage()));
    return jsonObject;
}


/**
 * 
 * huoqu 系统内存
 * @throws SigarException 
 */
public static JSONObject  getMemory() throws SigarException {
    Mem mem = sigar.getMem();
    JSONObject jsonObject = new JSONObject();
    int memTotal = (int)Math.ceil((double)mem.getTotal() / (1024L * 1024L ));
    String memFree = String.format("%.1f", (double)mem.getFree() / (1024L * 1024L));
    jsonObject.put("total",memTotal);  //总内存 单位M
    jsonObject.put("use",memTotal-Double.parseDouble(memFree));  //剩余内存 单位M
    jsonObject.put("residue",memFree);  //剩余内存 单位M
    return jsonObject;
}

/**
 *  huoqu  硬盘信息
 */
public static JSONObject getDiskInfromation() {
    JSONObject jsonObject = new JSONObject();
    //获取硬盘
    Long ypTotal = 0L;
    Long ypfree = 0L;
    try {
        FileSystem fslist[] = sigar.getFileSystemList();
        for (int i = 0; i < fslist.length; i++) {  
            FileSystem fs = fslist[i];              
            FileSystemUsage usage = null;  
            usage = sigar.getFileSystemUsage(fs.getDirName());  
            switch (fs.getType()) {  
            case 0: // TYPE_UNKNOWN :未知  
            break;  
            case 1: // TYPE_NONE  
                break;  
            case 2: // TYPE_LOCAL_DISK : 本地硬盘  
                // 文件系统总大小  
                ypTotal += usage.getTotal();
                ypfree += usage.getFree();  
                break;  
            case 3:// TYPE_NETWORK :网络  
                break;  
            case 4:// TYPE_RAM_DISK :闪存  
                break;  
            case 5:// TYPE_CDROM :光驱  
                break;  
            case 6:// TYPE_SWAP :页面交换  
                break;  
            }      
        }   
        int hdTotal = (int)((double)ypTotal / (1024L));
        String hdfree = String.format("%.1f", (double)ypfree / (1024L));
        jsonObject.put("total",hdTotal);  //总内存 单位M
        jsonObject.put("use",hdTotal-Double.parseDouble(hdfree));  //剩余内存 单位M
        jsonObject.put("residue",hdfree);  //剩余内存 单位M
    } catch (SigarException e1) {
        e1.printStackTrace();
    }  
    return jsonObject;
}
/**
 * huoqu 网卡信息
 */
public static JSONObject getInterCardInformation(int i) {
    JSONObject jsonObject = new JSONObject();
    try {
        String ifNames[] = sigar.getNetInterfaceList();
        jsonObject.put("name", ifNames[i]);//网络名称
        NetInterfaceConfig ifconfig = sigar.getNetInterfaceConfig(ifNames[i]); 
        jsonObject.put("ip", ifconfig.getAddress());  //ip地址
        jsonObject.put("sonip", ifconfig.getNetmask());  //子网掩码
        jsonObject.put("cardinformation", ifconfig.getDescription()); //网卡信息
        jsonObject.put("type", ifconfig.getType()); //网卡类型
        NetInterfaceStat ifstat = sigar.getNetInterfaceStat(ifNames[i]);
        jsonObject.put("recevie", ifstat.getRxBytes()); //接收到的总字节数
        jsonObject.put("send", ifstat.getTxBytes()); //发送的总字节数
    } catch (SigarException e) {
        e.printStackTrace();
    } 
    return jsonObject;

}
/**
 *  设置系统的CPI属性
 */
public static JSONObject setSysCpi() {
    JSONObject jsonObject = new JSONObject();
    String exeCmd = exeCmd("lspci  | grep -i vga");
    String exeCmd2 = exeCmd("lspci  | grep -i audio");
    jsonObject.put("showcard", exeCmd.substring(exeCmd.indexOf("controller: ")+12));
    jsonObject.put("voidcard", exeCmd2.substring(exeCmd2.indexOf("controller: ")+12));
    return jsonObject;
}
/**
 *    执行linux命令并返回结果
 * @param commandStr
 * @return
 */
public static String exeCmd(String commandStr) {

    String result = null;
    try {
        String[] cmd = new String[]{"/bin/sh", "-c",commandStr};
        Process ps = Runtime.getRuntime().exec(cmd);

        BufferedReader br = new BufferedReader(new InputStreamReader(ps.getInputStream()));
        StringBuffer sb = new StringBuffer();
        String line;
        while ((line = br.readLine()) != null) {
            //执行结果加上回车
            sb.append(line).append("\n");
        }
        result = sb.toString();


    } catch (Exception e) {
        e.printStackTrace();
    }
    return result;
}

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值