使用sigar获取本机 服务器、系统、CPU、JVM、内存信息
周六在家闲来无事学习了一下利用Sigar获取本机服务器、系统、CPU、JVM、内存等信息
事业是栏杆,我们扶着它在深渊的边沿上走路。——高尔基《阿尔塔莫诺夫家的事业》
周六在家闲来无事学习了一下利用Sigar
获取本机服务器、系统
、CPU
、JVM
、内存
等信息
(资料图)
Sigar
是Hyperic-hq
产品的基础包,是Hyperic HQ
主要的数据收集组件。它用来从许多平台收集系统和处理信息
Sigar
有C
,C#
,Java
和Perl API
,java
版的API为sigar.jar sigar.jar的底层是用C语言编写的,它通过本地方法来调用操作系统API来获取系统相关数据。
注意:Sigar为不同平台提供了不同的库文件.典型的:
windows平台:sigar-x86-winnt.dll
linux平台:libsigar-x86-linux.so或
solaris平台: libsigar-x86-solaris.so或libsigar-sparc-solaris.so或libsigar-sparc64-solaris.so
64位平台:分为至强的libsigar-ia64-linux.so和AMD的libsigar-amd64-linux.so,sigar-amd64-winnt.dll
Sigar:文件下载
首先导入sigar
依赖
org.fusesource sigar 1.6.4
package space.land.util;import lombok.SneakyThrows;import org.hyperic.sigar.*;import org.springframework.stereotype.Component;import space.land.model.vo.server.ServerInfos;import java.net.InetAddress;import java.util.ArrayList;import java.util.List;import java.util.Map;import java.util.Properties;/** * Title: 获取本机 服务器、系统、CPU、JVM、内存信息。 * * @author Fking * @version 1.0.0 * @since 2022/1/5 18:53 */@Componentpublic class ServerUtil { @SneakyThrows public static ServerInfos getServerInfo() { //服务器信息 Properties properties = System.getProperties(); Map getenv = System.getenv(); InetAddress localHost = InetAddress.getLocalHost(); ServerInfos.ServerInfo serverInfo = ServerInfos.ServerInfo.builder().userName(getenv.get("USERNAME")).computerName(getenv.get("COMPUTERNAME")).computerDomain(getenv.get("USERDOMAIN")).serverIp(localHost.getHostAddress()).hostName(localHost.getHostName()).userHome(properties.getProperty("user.home")).userDir(properties.getProperty("user.dir")).build(); //系统信息 OperatingSystem instance = OperatingSystem.getInstance(); ServerInfos.SystemInfo systemInfo = ServerInfos.SystemInfo.builder().vendorName(instance.getVendorName()).arch(instance.getArch()).description(instance.getDescription()).version(instance.getVersion()).build(); //CPU信息 Sigar sigar = new Sigar(); List cpuInfoList = new ArrayList<>(); CpuInfo[] infoList = sigar.getCpuInfoList(); CpuPerc[] cpuList = sigar.getCpuPercList(); for (int i = 0; i < infoList.length; i++) { CpuInfo cpuInfo = infoList[i]; CpuPerc cpu = cpuList[i]; cpuInfoList.add(ServerInfos.CpuInfo.builder().mhz(cpuInfo.getMhz()).vendor(cpuInfo.getVendor()).cacheSize(cpuInfo.getCacheSize()).freqUser(cpu.getUser()).freqSys(cpu.getSys()).freqWait(cpu.getWait()).freqNice(cpu.getNice()).freqIdle(cpu.getIdle()).freqCombined(cpu.getCombined()).build()); } //JVM信息 Runtime runtime = Runtime.getRuntime(); ServerInfos.JvmInfo jvmInfo = ServerInfos.JvmInfo.builder().totalMemory(runtime.totalMemory()).freeMemory(runtime.freeMemory()).availableProcessors(runtime.availableProcessors()).version(properties.getProperty("version")).vendor(properties.getProperty("java.vendor")).home(properties.getProperty("java.home")).specificationVersion(properties.getProperty("java.specification.version")).classPath(properties.getProperty("java.class.path")).libraryPath(properties.getProperty("java.library.path")).tmpdir(properties.getProperty("java.io.tmpdir")).dirs(properties.getProperty("java.ext.dirs")).build(); //内存信息 Mem mem = sigar.getMem(); Swap swap = sigar.getSwap(); ServerInfos.MemoryInfo memoryInfo = ServerInfos.MemoryInfo.builder().memoryTotal(mem.getTotal() / (1024 * 1024L)).memoryUsed(mem.getUsed() / (1024 * 1024L)).memoryFree(mem.getFree() / (1024 * 1024L)).swapTotal(swap.getTotal() / (1024 * 1024L)).swapUsed(swap.getUsed() / (1024 * 1024L)).swapFree(swap.getFree() / (1024 * 1024L)).build(); return ServerInfos.builder().serverInfo(serverInfo).systemInfo(systemInfo).cpuInfo(cpuInfoList).jvmInfo(jvmInfo).memoryInfo(memoryInfo).build(); }}~~~~~~javapackage space.land.model.vo.server;import lombok.AllArgsConstructor;import lombok.Builder;import lombok.Data;import lombok.NoArgsConstructor;import lombok.experimental.Accessors;import java.util.List;/** * Title: 服务器、系统、CPU、JVM、内存信息。 * * @author Fking * @version 1.0.0 * @since 2022/1/7 14:53 */@NoArgsConstructor@AllArgsConstructor@Data@Builder@Accessors(chain = true)public class ServerInfos { private ServerInfo serverInfo; private SystemInfo systemInfo; private List cpuInfo; private JvmInfo jvmInfo; private MemoryInfo memoryInfo; /** * Title: 服务器信息 * * @author Fking * @since 2022/1/7 */ @NoArgsConstructor @AllArgsConstructor @Data @Builder @Accessors(chain = true) public static class ServerInfo { //用户名 private String userName; //计算机名 private String computerName; //计算机域名 private String computerDomain; //本机ip private String serverIp; //本机主机名 private String hostName; //用户的主目录 private String userHome; //用户的当前工作目录 private String userDir; } /** * Title: 系统信息 * * @author Fking * @since 2022/1/7 */ @NoArgsConstructor @AllArgsConstructor @Data @Builder @Accessors(chain = true) public static class SystemInfo { //操作系统名称 private String vendorName; //内核构架 private String arch; //操作系统的描述 private String description; //操作系统的版本号 private String version; } /** * Title: CPU信息 * * @author Fking * @since 2022/1/7 */ @NoArgsConstructor @AllArgsConstructor @Data @Builder @Accessors(chain = true) public static class CpuInfo { //CPU的总量MHz private int mhz; //CPU的厂商 private String vendor; //CPU型号类别 private String model; //缓冲缓存数量 private long cacheSize; //CPU的用户使用率 private double freqUser; //CPU的系统使用率 private double freqSys; //CPU的当前等待率 private double freqWait; //CPU的当前错误率 private double freqNice; //CPU的当前空闲率 private double freqIdle; //CPU总的使用率 private double freqCombined; } /** * Title: JVM信息 * * @author Fking * @since 2022/1/7 */ @NoArgsConstructor @AllArgsConstructor @Data @Builder @Accessors(chain = true) public static class JvmInfo { //JVM可以使用的总内存 private long totalMemory; //JVM可以使用的剩余内存 private long freeMemory; //JVM可以使用的处理器个数 private int availableProcessors; //Java的运行环境版本 private String version; //Java的运行环境供应商 private String vendor; //Java的安装路径 private String home; //Java运行时环境规范版本 private String specificationVersion; //Java的类路径 private String classPath; //Java加载库时搜索的路径列表 private String libraryPath; //默认的临时文件路径 private String tmpdir; //扩展目录的路径 private String dirs; } /** * Title: 内存信息 * * @author Fking * @since 2022/1/7 */ @NoArgsConstructor @AllArgsConstructor @Data @Builder @Accessors(chain = true) public static class MemoryInfo { //内存总量 private long memoryTotal; //当前内存使用量 private long memoryUsed; //当前内存剩余量 private long memoryFree; //交换区总量 private long swapTotal; //当前交换区使用量 private long swapUsed; //当前交换区剩余量 private long swapFree; }}
过程问题记录:
因为我电脑上java版本有很多个,1.8/11/17 放文件的时候放错了版本就出现了错误1:
org.hyperic.sigar.SigarException: no sigar-amd64-winnt.dll in java.library
提示我没有找到该文件进行监控。
这个时候咱们打印System.out.println(System.getProperties().getProperty("java.library.path"));
看看咱们的jdk装到了哪里,然后把文件放到对应的bin目录下面根据不同的系统对应放上。
这个问题就解决了,随之迎来了第二个问题,就是对应上之后当我在执行的时候又出现了另一个问题
错误2:
这个问题是在Windows下Java 版本中 1.8.0_131
到 1.8.0_241
都适合, 在 jdk1.8.0_261 包括在内以及以上不适合
Windows下降低版本然后重新导入就可以了。至于Liunx下我还没有测试
周六在家闲来无事学习了一下利用Sigar获取本机服务器、系统、CPU、JVM、内存等信息
您的浏览器不支持video标签。花江大峡谷以其雄奇险峻被称作“地球裂缝”,裂缝之间,花江峡谷大桥建设现场一派繁忙。大
川观新闻记者兰珍2月23日,在成都举办的2023年中国网络和数据安全产业高峰论坛上,国家网络安全产业园区(成渝地区)正
1、A,B,D,E答案解析:抽样调查具有以下特点:①经济性。2、这是抽样调查的一个最显著优点;②时效性强。3、抽样调查
文 羊城晚报全媒体记者梁怿韬干晴天气,吸引不少广州市民外出赏花;一些市民游客更在广州街头吃起雪糕。气象部门提醒,受冷空气影响,广东本周
1、ipad自动旋转屏幕怎么设置?让我们来看看!2、从屏幕右上角向下滑动以打开控制中心。3、点按“旋转锁定”按钮以关闭屏
南通崇川区召开2023文旅融合高质量发展大会
“安徽省隆泰玫瑰花标准化示范区”等3个项目通过验收
最新国际白银价格是多少(2023年2月22日)
突变!放弃全资收购
春节假期后,在市场乐观预期的推动下,铁矿石价格涨势凌厉。2月21日,铁矿石期价创近9个月新高。在大连商品交易所连续发布市场风险提示公告和
S H Figuartsモンキー・D・ルフィ-鬼ヶ島討入-アクションフィギュアシリーズ「S H Figuarts」に鬼ヶ島討入衣装の「モンキー・D・ルフィ」が登
华商记者帮|西安女子月薪3700元请假1天半被扣掉近900元
中国电研11月29日披露投资者关系活动记录表显示,此次广州疫情暂未对公司生产经营造成重大影响,目前公司生产经营一切正常,
若问时下最不可辜负的美食是什么?当属麻辣鲜香的小龙虾了。5月29日,来自武汉的媒体和车主朋友们,驾驶着东风Hondae
1打开微信首先在手机桌面上找到微信应用,点击进入主页。2搜索公众号搜索栏输入快捷指令,点击进入iOS快捷指令公众号。3获取快捷指令链接发送
1、我买的奇骏。2、买欧蓝德,这车缺点太多:空间太大,人坐在里面有点旷。3、2、这4j12发动机太省油了,这样会引起两石
1、a1纸尺寸是594mm×841mm。2、过去是以多少 "开 "(多为正度纸,例如8开或16开等,不同于大度纸)来表示纸张
1、黄江伊顿外国语学校,似乎没有高中。2、只有小学、初中。3、可询问学校办公室、教务处。4、学校办公室、教务处的解释是最
直播吧2月22日讯据记者丁旭报道,大连人近期的热身赛计划已经初步出炉。2月8日,大连人全队在俱乐部基地集结,开始了新赛