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;
} }
JAVA如何利用Swiger获取Linux系统电脑配置相关信息的更多相关文章
- Java获取Linux系统cpu使用率
原文:http://www.open-open.com/code/view/1426152165201 import java.io.BufferedReader; import java.io.Fi ...
- C/C++获取Linux系统CPU和内存及硬盘使用情况
需求分析: 不使用Top df free 等命令,利用C/C++获取Linux系统CPU和内存及硬盘使用情况 实现: //通过获取/proc/stat (CPU)和/proc/meminfo(内存 ...
- Linux系统下查看硬件信息命令大全
导读 有许多命令可以用来查看 Linux 系统上的硬件信息.有些命令只能够打印出像 CPU 和内存这一特定的硬件组件信息,另外一些命令可以查看多种硬件组件的信息. 这个教程可以带大家快速了解一下查看各 ...
- Linux 系统下查看硬件信息命令大全
有许多命令可以用来查看 Linux 系统上的硬件信息.有些命令只能够打印出像 CPU 和内存这一特定的硬件组件信息,另外一些命令可以查看多种硬件组件的信息. 这个教程可以带大家快速了解一下查看各种硬件 ...
- 虚拟机Linux系统下配置网络
虚拟机上安装Redhat9.0后是没有网络的,而本来的Windows系统是可以上网的,此时想在Redhat上网就需要在Linux系统上配置网络,以下是笔者自己配置的一点心得. 1.电脑本机系统打开网络 ...
- Linux系统运维相关的面试题 (问答题)
这里给大家整理了一些Linux系统运维相关的面试题,有些问题没有标准答案,希望要去参加Linux运维面试的朋友,可以先思考下这些问题. 一.Linux操作系统知识 1.常见的Linux发行版本都有 ...
- 利用python获取自己的qq群成员信息
利用python获取自己的qq群成员信息! 首先说明一下需要使用的工具以及技术:python3 + selenium selenium安装方法:pip install selenium 前提:获取自己 ...
- Linux系统之网络相关的命令
Linux系统之网络相关的命令 网络概述 网络:通过通信介质和通信设备 将分布不同地点的两台或多台计算机,经过相应的程序实现通信switch 交换机router 路由器网络的功能:数据通信:利用网络传 ...
- Linux 系统 网络配置
Linux 系统 网络配置 配置Linux系统网络的方法有几种,这里介绍本人常用的两种. 第一种:使用命令ifconfig配置,具体用法:Ipconfig ethx x.x.x.x net ...
随机推荐
- vue cli 3.x 项目部署到 github pages
github pages 是 github 免费为用户提供的服务,写博客,或者部署一些纯静态项目. 最近将 vue cli 3.x 初始化项目部署到 github pages,踩了一些坑,记录如下. ...
- 为什么从前那些.NET开发者都不写单元测试呢?
楔子 四年前我虽然也写了很多年代码,由于公司虽然规模不小,却并非一家规范化的软件公司,因此在项目中严格意义上来说并没有架构设计.也不写单元测试,后来有幸加入了一家公司,这家公司虽然也是一家小公司,但是 ...
- ConfirmCancelBottomSheetDialog【确认取消底部对话框】
版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 继承BottomSheetDialog,实现简单的确认取消对话框样式. 效果图 代码分析 ConfirmCancelBottomSh ...
- 学习笔记01(mybatis逆向工程)
今天来看看一个常用的小功能,就是mybatis的逆向工程.(数据库是mysql) 什么是逆向工程呢?看名字就知道反方向的一个什么工程! 其实啊,如果是平常我们自己学习实践一些小项目的时候,应该是先瞎写 ...
- 把ABP框架部署到Docker中
本文旨在将Abp项目部署到Docker容器中,借助Gitee存储,Jenkins持续构建,利用Docker Compose生成镜像.启动镜像,在官网给定的Abp项目中,虽然用到了Dockerfile. ...
- Spring Boot 2.0 的快速入门(图文教程)
摘要: 原创出处 https://www.bysocket.com 「公众号:泥瓦匠BYSocket 」欢迎关注和转载,保留摘要,谢谢! Spring Boot 2.0 的快速入门(图文教程) 大家都 ...
- WinDbg调试C#技巧,解决CPU过高、死锁、内存爆满
软件安装 安装问题:执行 .loadby sos clr 命令无效 解决办法: .load C:\Windows\Microsoft.NET\Framework64\v4.0.30319\SOS.dl ...
- 解读经典《C#高级编程》继承 页107-113.章4
前言 本章节开始讲接口. 接口 接口的声明很像抽象类,有方法的声明但无方法体.但它比抽象类限制更多.和类比起来,接口的定义有众多限制. 接口只能包含声明,而无方法体 接口只能包含方法.属性.索引器.事 ...
- EF基于方法的查询语法
实体框架(Entity Framework )是 ADO.NET 中的一套支持开发面向数据的软件应用程序的技术. LINQ to Entities 提供语言集成查询 (LINQ) 支持,它允许开发人员 ...
- 基于Springboot集成security、oauth2实现认证鉴权、资源管理
1.Oauth2简介 OAuth(开放授权)是一个开放标准,允许用户授权第三方移动应用访问他们存储在另外的服务提供者上的信息,而不需要将用户名和密码提供给第三方移动应用或分享他们数据的所有内容,OAu ...