java使用sigar获取服务器的信息
如果我们想要获取服务器的一些基本信息,我们需要如何操作呢?
在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获取服务器的信息相关推荐
- PHP 获取服务器详细信息
PHP 获取系统信息,PHP 获取服务器详细信息 获取系统类型及版本号: php_uname() (例:Windows NT ...
- java读取微信消息_微信公众平台开发中使用Java如何实现获取用户的信息
微信公众平台开发中使用Java如何实现获取用户的信息 发布时间:2020-11-18 15:09:28 来源:亿速云 阅读:93 作者:Leah 本篇文章为大家展示了微信公众平台开发中使用Java如何 ...
- java获取服务器信息吗_java获取服务器一些信息的方法
request.getServletContext().getRealPath("/") 获取项目所在服务器的全路径,如:D:\Program Files\apache-tomca ...
- php获取服务器相关信息
2019独角兽企业重金招聘Python工程师标准>>> php可以通过相关函数获取服务器和php环境的相关信息 ,如下代码: <html><head>< ...
- php获取服务器数据库信息,PHP获取服务器信息
# 获取服务器信息 ## [PHP交流群:494826865(点击群号立即加群)](https://jq.qq.com/?_wv=1027&k=50Qy5h6) >[success]在做 ...
- 通过SnmpWalk获取服务器状态信息
简单网络管理协议SNMP(Simple Network Management Protocol)是网络监控和网络设备管理的统一 协议,并被所有主流的操作系统和大量网络应用程序所支持.SNMP广泛用于管 ...
- Java 通过 ip 获取所属城市信息
文章目录 1 摘要 2 核心 Maven 依赖 3 离线数据 db 保存 4 核心代码 5 测试 6 推荐参考资料 1 摘要 在实际项目中可能会用到统计用户地理位置的需求,这时可以通过客户端的 ip ...
- Java.Utils:获取电脑配置信息
Don't say much, just go to the code. package org.bood.common.utils;import java.io.*;/*** 获取电脑配置信息** ...
- php 获取服务器,PHP 获取服务器详细信息
获取系统类型及版本号: php_uname()(例:Windows NT COMPUTER 5.1 build 2600) 只获取系统类型: php_uname('s') (或 ...
最新文章
- 百度站长工具进击site结果页面[SITE特型]
- iOS 性能优化-启动优化、main函数之前优化-二进制重排
- 阿尔伯塔大学的计算机科学专业好吗,阿尔伯塔大学哪个专业好?三大热门方向成就高薪未来...
- 登录匿名ftp服务器网站,匿名登录ftp服务器
- Docker代理设置方法
- 异步消息的传递-回调机制(转)
- 普元EOS:执行自定义命名sql查询(无参,有参)
- 基于WDF的驱动开发
- 用html5画瀑布图,漂亮的Excel瀑布图,竟然如此简单~~
- 感抗和容抗的计算及说明
- 表达式和语句的简单理解
- 微信公众号花式排版技巧分享
- 六种礼仪帮助你赢得面试
- 这,才是有本事的男人
- 系统梳理总结JAVA全栈知识点,七面阿里成功斩获P8Offer
- Python遍历目录下的文件(os.walk 、os.listdir的用法)
- 超简单Ubuntu Server 配置FTP服务器教程
- 苹果第一台计算机的诞生的,纪念Mac诞生30周年:第一台Mac电脑深度拆解
- python整段注释_python段注释
- 【密码算法 之十四】非对称算法,ECC椭圆曲线算法 之 ECDSA、ECDH、SM2、SM9等