如果我们想要获取服务器的一些基本信息,我们需要如何操作呢?

在java中,我们可以使用sigar来进行实现,sigar能够实现获取服务器运行时的各项状态信息,如:cpu占用率、内存使用情况等

话不多说,首先我们需要下载包,我理解这个应该是服务器的探针,可以基于java来进行获取;

本次使用的是hyperic-sigar-1.6.4.zip;如果需要下载的可以看文末进行获取;

当然,这个也是需要分64,32和windos,liunx的,不同的类型需要的文件的不同;

下载之后进行解压,windows将加压后的(路径为:D:\project\sigar\hyperic-sigar-1.6.4\sigar-bin\lib)下的:

sigar-amd64-winnt.dll或者sigar-x86-winnt.dll上传到:C:\Windows\System32

linux的将libsigar-x86-linux.so或者libsigar-amd64-linux.so上传到  cd /usr/lib中

不清楚自己的机器类型的话可以都上传上去

接下来进行java的开发

pom文件引入:

    <dependency><groupId>org.fusesource</groupId><artifactId>sigar</artifactId><version>1.6.4</version></dependency>

开发工具类

import org.hyperic.sigar.*;
import org.springframework.stereotype.Component;import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;@Component
public class SysInfo {// 1.CPU资源信息// a)CPU数量(单位:个)public int getCpuCount() throws SigarException {Sigar sigar = new Sigar();try {return sigar.getCpuInfoList().length;} finally {sigar.close();}} // b)CPU的总量(单位:HZ)及CPU的相关信息public List<Map<String, Object>> getCpuTotal() {Sigar sigar = new Sigar();CpuInfo[] infos;List<Map<String, Object>> result = new ArrayList<>();try {infos = sigar.getCpuInfoList();for (int i = 0; i < infos.length; i++) {// 不管是单块CPU还是多CPU都适用CpuInfo info = infos[i];Map<String, Object> map = new HashMap<>(16);map.put("CPU的总量MHz", info.getMhz());map.put("获得CPU的卖主", info.getVendor());map.put("获得CPU的类别", info.getModel());map.put("缓冲存储器数量", info.getCacheSize());result.add(map);}} catch (SigarException e) {e.printStackTrace();}return result;} // c)CPU的用户使用量、系统使用剩余量、总的剩余量、总的使用占用量等(单位:100%)public List<Map<String, Object>> testCpuPerc() {Sigar sigar = new Sigar();// 方式一,主要是针对一块CPU的情况CpuPerc cpu;List<Map<String, Object>> result = new ArrayList<>();// 方式二,不管是单块CPU还是多CPU都适用CpuPerc cpuList[] = null;try {cpuList = sigar.getCpuPercList();} catch (SigarException e) {e.printStackTrace();}for (int i = 0; i < cpuList.length; i++) {Map<String, Object> map = new HashMap<>(16);map.put("用户使用率", CpuPerc.format(cpuList[i].getUser()));map.put("系统使用率", CpuPerc.format(cpuList[i].getSys()));map.put("当前等待率", CpuPerc.format(cpuList[i].getWait()));map.put("getNice", CpuPerc.format(cpuList[i].getNice()));map.put("当前空闲率", CpuPerc.format(cpuList[i].getIdle()));map.put("总的使用率", CpuPerc.format(cpuList[i].getCombined()));result.add(map);}return result;}public Map<String, Object> getPhysicalMemory() {// a)物理内存信息Sigar sigar = new Sigar();Mem mem;Map<String, Object> map = new HashMap<>(16);try {mem = sigar.getMem();// 内存总量map.put("内存总量", mem.getTotal() / 1024L + "K av");// 当前内存使用量// 当前内存剩余量map.put("当前内存剩余量", mem.getFree() / 1024L + "K free");// b)系统页面文件交换区信息Swap swap = sigar.getSwap();// 交换区总量map.put("交换区总量", swap.getTotal() / 1024L + "K av");// 当前交换区使用量map.put("当前交换区使用量", swap.getUsed() / 1024L + "K used");// 当前交换区剩余量map.put("当前交换区剩余量", swap.getFree() / 1024L + "K free");} catch (SigarException e) {e.printStackTrace();}return map;}// 3.操作系统信息// a)取到当前操作系统的名称:public String getPlatformName() {String hostname = "";try {hostname = InetAddress.getLocalHost().getHostName();} catch (Exception exc) {Sigar sigar = new Sigar();try {hostname = sigar.getNetInfo().getHostName();} catch (SigarException e) {hostname = "localhost.unknown";} finally {sigar.close();}}return hostname;} // b)取当前操作系统的信息public Map<String, Object> testGetOSInfo() {OperatingSystem OS = OperatingSystem.getInstance();// 操作系统内核类型如: 386、486、586等x86Map<String, Object> result = new HashMap<>();Map<String, Object> subtype = new HashMap<>();subtype.put("OS.getArch()", OS.getArch());subtype.put("OS.getCpuEndian()", OS.getCpuEndian());subtype.put("OS.getDataModel()", OS.getDataModel());subtype.put("OS.getCpuEndian()", OS.getCpuEndian());subtype.put("OS.getDataModel()", OS.getDataModel());result.put("操作系统内核类型", subtype);// 系统描述Map<String, Object> subdesc = new HashMap<>();subdesc.put("OS.getDescription()", OS.getDescription());subdesc.put("OS.getMachine()", OS.getMachine());result.put("系统描述", subdesc);Map<String, Object> subtype1 = new HashMap<>();subtype1.put("OS.getName()", OS.getName());subtype1.put("OS.getPatchLevel()", OS.getPatchLevel());result.put("操作系统类型", subtype1);// 操作系统类型// 操作系统的卖主result.put("操作系统的卖主", OS.getVendor());// 卖主名称result.put("卖主名称", OS.getVendorCodeName());// 操作系统名称result.put("操作系统名称", OS.getVendorName());// 操作系统卖主类型result.put("操作系统卖主类型", OS.getVendorVersion());// 操作系统的版本号result.put("操作系统的版本号", OS.getVersion());return result;}// c)取当前系统进程表中的用户信息public List<Object> testWho() {List<Object> result = new ArrayList<>();try {Sigar sigar = new Sigar();org.hyperic.sigar.Who[] who = sigar.getWhoList();if (who != null && who.length > 0) {for (int i = 0; i < who.length; i++) {Map<String, Object> subtype = new HashMap<>();System.out.println("\n~~~~~~~~~" + String.valueOf(i) + "~~~~~~~~~");org.hyperic.sigar.Who _who = who[i];subtype.put("getDevice", _who.getDevice());subtype.put("getHost", _who.getHost());subtype.put("getTime", _who.getTime());subtype.put("getUser", _who.getUser());// 当前系统进程表中的用户名result.add(subtype);}}} catch (SigarException e) {e.printStackTrace();}return result;}
}

控制层进行调用

 @Autowiredprivate SysInfo sysInfo;@ResponseBody@RequestMapping("5")public Map<String, Object> test5() throws SigarException {Map<String, Object> result = new HashMap<>();result.put("CPU数量", sysInfo.getCpuCount());result.put("CPU的相关信息(单位HZ)", sysInfo.getCpuTotal());result.put("CPU的用户使用量(单位100%)", sysInfo.testCpuPerc());result.put("物理内存信息", sysInfo.getPhysicalMemory());result.put("操作系统名称", sysInfo.getPlatformName());result.put("取当前操作系统的信息", sysInfo.testGetOSInfo());result.put(" 取当前系统进程表中的用户信息", sysInfo.testWho());return result;}

相应结果

这样就可以获取到该服务器的基本的信息

延伸:如果想做一些自己的服务器的监控,又不想用开源的一些信息,可以使用sigar来进行开发;当然,这个也可以进行进一步的优化:

(1)开发成可视化界面

(2)信息进行持久化

(3)探针文件自动上传不同的服务器

后面有时间将继续优化功能。

java使用sigar获取服务器的信息相关推荐

  1. PHP 获取服务器详细信息

    PHP 获取系统信息,PHP 获取服务器详细信息 获取系统类型及版本号:    php_uname()                                   (例:Windows NT ...

  2. java读取微信消息_微信公众平台开发中使用Java如何实现获取用户的信息

    微信公众平台开发中使用Java如何实现获取用户的信息 发布时间:2020-11-18 15:09:28 来源:亿速云 阅读:93 作者:Leah 本篇文章为大家展示了微信公众平台开发中使用Java如何 ...

  3. java获取服务器信息吗_java获取服务器一些信息的方法

    request.getServletContext().getRealPath("/") 获取项目所在服务器的全路径,如:D:\Program Files\apache-tomca ...

  4. php获取服务器相关信息

    2019独角兽企业重金招聘Python工程师标准>>> php可以通过相关函数获取服务器和php环境的相关信息 ,如下代码: <html><head>< ...

  5. php获取服务器数据库信息,PHP获取服务器信息

    # 获取服务器信息 ## [PHP交流群:494826865(点击群号立即加群)](https://jq.qq.com/?_wv=1027&k=50Qy5h6) >[success]在做 ...

  6. 通过SnmpWalk获取服务器状态信息

    简单网络管理协议SNMP(Simple Network Management Protocol)是网络监控和网络设备管理的统一 协议,并被所有主流的操作系统和大量网络应用程序所支持.SNMP广泛用于管 ...

  7. Java 通过 ip 获取所属城市信息

    文章目录 1 摘要 2 核心 Maven 依赖 3 离线数据 db 保存 4 核心代码 5 测试 6 推荐参考资料 1 摘要 在实际项目中可能会用到统计用户地理位置的需求,这时可以通过客户端的 ip ...

  8. Java.Utils:获取电脑配置信息

    Don't say much, just go to the code. package org.bood.common.utils;import java.io.*;/*** 获取电脑配置信息** ...

  9. php 获取服务器,PHP 获取服务器详细信息

    获取系统类型及版本号:    php_uname()(例:Windows NT COMPUTER 5.1 build 2600) 只获取系统类型:          php_uname('s') (或 ...

最新文章

  1. 百度站长工具进击site结果页面[SITE特型]
  2. iOS 性能优化-启动优化、main函数之前优化-二进制重排
  3. 阿尔伯塔大学的计算机科学专业好吗,阿尔伯塔大学哪个专业好?三大热门方向成就高薪未来...
  4. 登录匿名ftp服务器网站,匿名登录ftp服务器
  5. Docker代理设置方法
  6. 异步消息的传递-回调机制(转)
  7. 普元EOS:执行自定义命名sql查询(无参,有参)
  8. 基于WDF的驱动开发
  9. 用html5画瀑布图,漂亮的Excel瀑布图,竟然如此简单~~
  10. 感抗和容抗的计算及说明
  11. 表达式和语句的简单理解
  12. 微信公众号花式排版技巧分享
  13. 六种礼仪帮助你赢得面试
  14. 这,才是有本事的男人
  15. 系统梳理总结JAVA全栈知识点,七面阿里成功斩获P8Offer
  16. Python遍历目录下的文件(os.walk 、os.listdir的用法)
  17. 超简单Ubuntu Server 配置FTP服务器教程
  18. 苹果第一台计算机的诞生的,纪念Mac诞生30周年:第一台Mac电脑深度拆解
  19. python整段注释_python段注释
  20. 【密码算法 之十四】非对称算法,ECC椭圆曲线算法 之 ECDSA、ECDH、SM2、SM9等

热门文章

  1. 最新阿里云服务器免费SSL证书配置HTTPS的两种方法(图文教程二)
  2. Jenkins 自动化部署
  3. 同步爬取天虹商城图片链接
  4. QQ尾巴病毒仿真(转)
  5. 文本框内容可以删除,就是不想让用户手工写入
  6. 鸿蒙音响怎么调,音响怎么调?专业人士教您如何调音响!
  7. numpy.logical_and()函数的使用
  8. ChatGPT和GPT-4带你选笔记本电脑
  9. 创业半年的思考,如何做出一个成功的游戏
  10. 2022年Python 未来发展前景怎么样?