当前位置:首页>新闻 > 正文

当前快讯:使用sigar获取本机 服务器、系统、CPU、JVM、内存信息

  • 2023-02-23 14:04:48来源:腾讯云

事业是栏杆,我们扶着它在深渊的边沿上走路。——高尔基《阿尔塔莫诺夫家的事业》


(相关资料图)

周六在家闲来无事学习了一下利用Sigar获取本机服务器、系统CPUJVM内存等信息

SigarHyperic-hq产品的基础包,是Hyperic HQ主要的数据收集组件。它用来从许多平台收集系统和处理信息

SigarCC#JavaPerl APIjava版的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_1311.8.0_241都适合, 在 jdk1.8.0_261 包括在内以及以上不适合

Windows下降低版本然后重新导入就可以了。至于Liunx下我还没有测试

标签: Linux Solaris Java Windows

延伸阅读

推荐阅读

当前快讯:使用sigar获取本机 服务器、系统、CPU、JVM、内存信息

周六在家闲来无事学习了一下利用Sigar获取本机服务器、系统、CPU、JVM、内存等信息

全球短讯!员工关怀方案_员工关怀

1、了解员工的工作,最好就是自己加入进去做一做,最起码是和他们待在一起,认真观察。2、然后才能说的其他的你应该先去融

焦点简讯:三立期货2月23日早间内参——能化

原油短期震荡偏弱为主,甲醇上涨动能比较充足,建议关注宏观方向,玻璃多空博弈激烈。三立期货早间内参显示,原油短期震荡偏弱为主,甲醇上涨

世界播报:QQ伤感网名大全_比较伤感的网名

1、绿色的山丘。2、爱了很久3、谈论古老的情歌4、仰望星空5、如果你违背时间6、俞玉生7、像酒一样温柔8、班昆元航9、神

环球热消息:教师终身学习重要性_教师师德的重要性

1、师德师风对一个教师来说个性的重要,因为,教师是孩子行动的标杆,教师的一言一行、一举一动都在潜移默化地影响着孩子。2、

天天动态:守护校园食品安全 四川4部门联手开展专项监督检查

近日,省市场监管局、教育厅、省卫生健康委、公安厅联合发出通知,开展2023年春季学校食品安全专项监督检查。

天天快播:买菜的拼音的读法

一、关于买菜的拼音的读法1、读法:[mǎicài]二、关于买菜的拼音的释义2、基础释义:即苦荬菜。又称荬菜、苦菜。

即时:美前副国务卿:处置“气球危机”的背后需要中美外交的共同努力

美国前副国务卿罗伯特·佐利克视觉中国资料图近日,美国前副国务卿罗伯特·佐利克(RobertB Zoellick)在美国《华盛顿邮报》发表评论文章称,美方

全球微速讯:高级扫雷技巧口诀_高级扫雷技巧口诀

1、我最快83秒。2、下面是借鉴别人的经验,希望对你有帮助。3、高级扫雷练习目标为三个阶段:速度--技巧--速度

世界热门:人工耳蜗手术要多久_人工耳蜗手术多少钱

1、人工耳蜗手术的费用包括术前评估、住院治疗、人工耳蜗本身、术后康复。2、手术的费用和人工耳蜗本身的费用,如一般进口人工

快播:生意社:二月供应偏紧 丙酮市场持续上行

证券时报网讯,据生意社数据显示,2月1日华东地区丙酮市场商谈价格在5150元 吨,2月21日华东丙酮市场商谈在5750元 吨,2月累计上涨11 65%。生

每日看点!祁阳市林业局:守正创新 奋勇争先 推动林业工作高质量发展

2022年,祁阳林长制和林业工作取得巨大成效,湖南省森林城市成功获牌,林长制工作获省政府真抓实干督查措施激励表彰,油茶产

焦点快看:高校体育场地开放缘何“说易行难”

高校体育场地开放缘何“说易行难”---近日,清华大学、上海交通大学、武汉大学等国内多所高校宣布向校友和部分社会人士开放校园,部分高校...

每日速看!hdd—fat32_hdd fat32和16有甚区别

1、磁盘数据组织结构不同FAT16只有一个DBR,且只占用逻辑0扇区;FAT32中的DBR多了一个副本,分别起始于逻辑0

当前资讯!干艾叶、苍术、陈皮泡水喝有什么作用?

艾叶是属于温经散寒,止血的作用,而苍术这个药物是属于燥湿性的药物,对于湿气比较重的病症有治疗的作用。而陈皮是属于顺气化痰的药物,对于

环球实时:内蒙古自治区直属机关女职工才艺展演启幕

工人日报-中工网记者李玉波记者日前获悉,为团结引领广大女职工立足新时代、勇担新使命、展现新作为,内蒙古自治区总工会、自治区直属机关工作

焦点简讯:奥海科技(002993)2月20日股东户数2.09万户,较上期减少1.8%

近日奥海科技披露,截至2023年2月20日公司股东户数为2 09万户,较2月10日减少384户,减幅为1 8%。户均持股

环球观热点:中曼石油:联合站正在抓紧建设中,计划于2023年6月30日前完工

同花顺金融研究中心2月21日讯,有投资者向中曼石油提问,1、去年夏天动工的联合加工站现在完工了吗?2、新疆地震对公司的生产经营有无影响  

焦点热文:欣旺达:目前储能在手订单充裕

南方财经2月21日电,欣旺达在投资者互动平台表示,目前公司动力电池业务板块合作客户覆盖海内外优质头部车企,在手订单充裕。公司与客户所签的

【播资讯】word行间距怎么设置_word如何设置行间距

1、工具:word方法如下:打开Word文档,选中要调整行间距的文字内容,然后鼠标右键。2、打开的快捷菜单选择“段落”命

环球聚焦:怎么装修一间小屋_怎么装修一间小屋好看

1、房子对每个人来说都是很重要的东西。有句话说得好:“先有房后有家”,尤其是现在。有没有房子已经成为当今男女交往的硬性条

世界报道:重点关注5个领域 商务部与河北省政府签署部省合作框架协议

重点关注5个领域商务部与河北省政府签署部省合作框架协议

世界快看点丨中国最美茶园万排茶园,《采茶舞曲》的灵感源泉,万亩绿海,好美

都说泰顺出好茶,很多身边的朋友就好泰顺茶。来一杯三杯香,闻闻清香,看着小芽儿在水中慢慢舒展。泰顺,中国茶叶之乡。来到万排茶园,中国最

天天关注:《我的世界》2023年2月20日兑换码是什么 2月20日兑换码在哪领取

你喜欢玩我的世界手游吗?那么我的世界手游中的奖励大家都领取过吗?今天58免费资源网小编就为大家准备了我的世界2023年2月20兑换码及领取方法介

环球热文:今日莫拉比法典_莫拉比

1、炉石,莫拉比,作为萨满的一张传奇卡,花费64 4的身材,和召唤迷雾的一样,但是它独特的效果是打开卡隙的利器,前提是

全球动态:盛松成等:城镇化后期消费或为经济增长主要驱动力

图1城镇化率与消费占比  注:本文选取的代表性国家(中国、韩国、日本、阿根廷、美国、德国、加拿大、英国、法国、新加坡)的平均消费率,样本

天天滚动:王宁王予波会见中国华电董事长江毅总经理叶向东一行

2月17日,省委书记王宁、省长王予波在昆明会见中国华电集团有限公司董事长江毅、总经理叶向东一行。王宁感谢中国华电长期以来在绿色能源开发、

全球热讯:战地3 directx error的解决方法_object error解决方法

1、objecterror对象错误 目标错误,导致该出错信息的原因主要是应为ntfs权限设置不当导致的。2、  解决

今日要闻!ps教程如何用放大镜将图片放大一点_ps放大镜怎么放大

1、今天,我将教你如何用放大镜放大图片。2、打开AdobePhotoshopCC2015。3、执行“文件打开”命令

快资讯丨特殊工种下岗后领多少养老金 工龄25年看他的养老金水平如何

特殊工种下岗后领多少养老金?工龄25年,看他的养老金水平如何被解雇工人的养老金包括三个主要部分:基本养老金、个人账户养老

猜您喜欢

    Copyright ©  2015-2022 西南服装网版权所有  备案号:皖ICP备2022009963号-8   联系邮箱:39 60 29 14 2@qq.com