java获取服务器信息需要用到sigar.jar,但该jar在linux下依赖于libsigar-amd64-linux.so、libsigar-x86-linux.so。在window下依赖于sigar-amd64-winnt.dll、sigar-x86-winnt.dll。配置文件这存在这模拟系统命名的操作,可以通过这些系统命名来获取系统的参数。

默认情况下是将依赖文件放在jdk下的lib包中,这样项目启动的时候会自动加载这些配置文件。但每个人使用就需要这么配置,太麻烦了,为了方便我们写一个公共类来优化这一问题。

package com.dhcc.isccore.common.util;import java.io.File;import org.hyperic.sigar.Sigar;import com.dhcc.isccore.common.constant.IsccoreConstant;public class SigarUtils {public final static Sigar sigar = initSigar();public static Sigar initSigar() {try {File classPath = new File(IsccoreConstant.SIGAR_PATH);String path = System.getProperty("java.library.path");String sigarLibPath = classPath.getCanonicalPath();// 为防止java.library.path重复加,此处判断了一下if (!path.contains(sigarLibPath)) {if (isOSWin()) {path += ";" + sigarLibPath;} else {path += ":" + sigarLibPath;}System.setProperty("java.library.path", path);}return new Sigar();} catch (Exception e) {return null;}}public static boolean isOSWin() {// OS 版本判断String OS = System.getProperty("os.name").toLowerCase();if (OS.indexOf("win") >= 0) {return true;} elsereturn false;}
}

文件存放位置如下:

jar依赖:

<dependency><groupId>org.hyperic</groupId><artifactId>sigar</artifactId><version>1.6.5.132</version>
</dependency>

获取服务器信息的vo类定义:

package com.dhcc.isccore.entity.serverinfo;import java.util.Date;
import java.util.List;import org.hyperic.sigar.NetInterfaceConfig;public class ServerInfoVo {private String serverIP;       //服务器IPprivate String serverURL;        //服务器Urlprivate String serverType;      //服务器类型private Date serverTime;     //服务器时间private String osName;           //操作系统名称private String osVersion;       //操作系统版本private String userName;        //用户名称private String userHome;      //用户主目录private String osTimeZone;       //操作系统时区private String memTotal;        //物理内存总量private String memUsed;         //已使用的物理内存private String memFree;           //物理内存剩余量private int cpuNum;                //cpu总数private List<CpuInfoVo> cpuList;//cpu信息private int netNum;         //网卡总数private List<NetInterfaceConfig> netList;   //网卡信息private String javaPath;      //java安路径private String javaVendor;     //java运行时供应商private String javaVersion;     //java版本private String javaName;        //java运行时名称private String jvmVersion;       //java虚拟机版本private String jvmTotalMemory;   //java虚拟机总内存private String jvmFreeMemory;   //java虚拟机剩余内存private String databaseType;   //数据库类型private String databaseVersion;  //数据库类型private String databaseDriver;   //数据库驱动private String driverVersion;    //数据库驱动版本private String jdbcUrl;            //数据库连接urlpublic String getServerIP() {return serverIP;}public void setServerIP(String serverIP) {this.serverIP = serverIP;}public String getServerURL() {return serverURL;}public void setServerURL(String serverURL) {this.serverURL = serverURL;}public String getServerType() {return serverType;}public void setServerType(String serverType) {this.serverType = serverType;}public String getOsName() {return osName;}public void setOsName(String osName) {this.osName = osName;}public String getOsVersion() {return osVersion;}public void setOsVersion(String osVersion) {this.osVersion = osVersion;}public String getUserName() {return userName;}public void setUserName(String userName) {this.userName = userName;}public String getUserHome() {return userHome;}public void setUserHome(String userHome) {this.userHome = userHome;}public String getOsTimeZone() {return osTimeZone;}public void setOsTimeZone(String osTimeZone) {this.osTimeZone = osTimeZone;}public String getJavaVendor() {return javaVendor;}public void setJavaVendor(String javaVendor) {this.javaVendor = javaVendor;}public String getJavaVersion() {return javaVersion;}public void setJavaVersion(String javaVersion) {this.javaVersion = javaVersion;}public String getJavaName() {return javaName;}public void setJavaName(String javaName) {this.javaName = javaName;}public String getJvmVersion() {return jvmVersion;}public void setJvmVersion(String jvmVersion) {this.jvmVersion = jvmVersion;}public String getJvmTotalMemory() {return jvmTotalMemory;}public void setJvmTotalMemory(String jvmTotalMemory) {this.jvmTotalMemory = jvmTotalMemory;}public String getJvmFreeMemory() {return jvmFreeMemory;}public void setJvmFreeMemory(String jvmFreeMemory) {this.jvmFreeMemory = jvmFreeMemory;}public String getDatabaseType() {return databaseType;}public void setDatabaseType(String databaseType) {this.databaseType = databaseType;}public String getDatabaseVersion() {return databaseVersion;}public void setDatabaseVersion(String databaseVersion) {this.databaseVersion = databaseVersion;}public String getDatabaseDriver() {return databaseDriver;}public void setDatabaseDriver(String databaseDriver) {this.databaseDriver = databaseDriver;}public String getDriverVersion() {return driverVersion;}public void setDriverVersion(String driverVersion) {this.driverVersion = driverVersion;}public String getJdbcUrl() {return jdbcUrl;}public void setJdbcUrl(String jdbcUrl) {this.jdbcUrl = jdbcUrl;}public Date getServerTime() {return serverTime;}public void setServerTime(Date serverTime) {this.serverTime = serverTime;}public String getJavaPath() {return javaPath;}public void setJavaPath(String javaPath) {this.javaPath = javaPath;}public int getCpuNum() {return cpuNum;}public void setCpuNum(int cpuNum) {this.cpuNum = cpuNum;}public List<CpuInfoVo> getCpuList() {return cpuList;}public void setCpuList(List<CpuInfoVo> cpuList) {this.cpuList = cpuList;}public int getNetNum() {return netNum;}public void setNetNum(int netNum) {this.netNum = netNum;}public List<NetInterfaceConfig> getNetList() {return netList;}public void setNetList(List<NetInterfaceConfig> netList) {this.netList = netList;}public String getMemTotal() {return memTotal;}public void setMemTotal(String memTotal) {this.memTotal = memTotal;}public String getMemUsed() {return memUsed;}public void setMemUsed(String memUsed) {this.memUsed = memUsed;}public String getMemFree() {return memFree;}public void setMemFree(String memFree) {this.memFree = memFree;}}

获取服务器信息的实现类:

public void findServerInfo(BaseAbstractDto baseAbstractDto){try {SigarUtils.initSigar();         //初始化动态库链接路径ServerInfoDto dto = super.getExactlyDto(baseAbstractDto);Properties props=System.getProperties();HttpServletRequest request = ServletActionContext.getRequest();Runtime runTime = Runtime.getRuntime();InetAddress address = InetAddress.getLocalHost();//服务信息ServerInfoVo serverInfoVo = new  ServerInfoVo();InetAddress.getLocalHost().getHostAddress();serverInfoVo.setServerIP(address.getHostAddress());serverInfoVo.setServerURL(request.getScheme()                    //请求头+"://" + address.getHostAddress()  //服务器地址  + ":"   + request.getServerPort()          //端口号  + request.getContextPath());        //项目名称 ServletContext application = request.getSession().getServletContext();serverInfoVo.setServerType(application.getServerInfo());serverInfoVo.setServerTime(new Date());//操作系统serverInfoVo.setOsName(props.getProperty("os.name")+"  "+props.getProperty("os.arch"));serverInfoVo.setOsVersion(props.getProperty("os.version"));serverInfoVo.setUserName(props.getProperty("user.name"));serverInfoVo.setUserHome(props.getProperty("user.home"));Calendar cal = Calendar.getInstance();TimeZone timeZone = cal.getTimeZone();serverInfoVo.setOsTimeZone(timeZone.getDisplayName());//CpuSigar sigar = new Sigar();CpuInfo cpuInfos[] = sigar.getCpuInfoList();serverInfoVo.setCpuNum(cpuInfos.length);CpuPerc cpuList[] = sigar.getCpuPercList();List<CpuInfoVo> cpuVoList = new ArrayList<CpuInfoVo>();for(int m=0;m<cpuList.length;m++){CpuInfoVo cpuInfoVo = new CpuInfoVo();cpuInfoVo.setCpuMhz(cpuInfos[m].getMhz());String cpuIdle = String.format("%.2f",cpuList[m].getIdle()*100)+"%";cpuInfoVo.setCpuLdle(cpuIdle);String cpuCombined = String.format("%.2f",cpuList[m].getCombined()*100)+"%";cpuInfoVo.setCpuCombined(cpuCombined);cpuVoList.add(cpuInfoVo);}serverInfoVo.setCpuList(cpuVoList);//网卡信息String netInfos[] = sigar.getNetInterfaceList();List<NetInterfaceConfig> netList = new ArrayList<NetInterfaceConfig>();for(int i=0;i<netInfos.length;i++){NetInterfaceConfig netInfo = sigar.getNetInterfaceConfig(netInfos[i]); if((NetFlags.LOOPBACK_ADDRESS.equals(netInfo.getAddress()))     //127.0.0.1 || (netInfo.getFlags() == 0)                              //标识为0|| (NetFlags.NULL_HWADDR.equals(netInfo.getHwaddr())) //MAC地址不存在|| (NetFlags.ANY_ADDR.equals(netInfo.getAddress()))       //0.0.0.0){continue;}netList.add(netInfo);}serverInfoVo.setNetNum(netList.size());serverInfoVo.setNetList(netList);//物理内存Mem mem = sigar.getMem();  serverInfoVo.setMemTotal((mem.getTotal()/(1024*1024))+"M");serverInfoVo.setMemUsed((mem.getUsed()/(1024*1024))+"M");serverInfoVo.setMemFree((mem.getFree()/(1024*1024))+"M");//java配置serverInfoVo.setJavaPath(props.getProperty("java.home"));serverInfoVo.setJavaVendor(props.getProperty("java.vendor"));serverInfoVo.setJavaVersion(props.getProperty("java.version"));serverInfoVo.setJavaName(props.getProperty("java.specification.name"));serverInfoVo.setJvmVersion(props.getProperty("java.vm.version"));serverInfoVo.setJvmTotalMemory((int)(runTime.totalMemory()/(1024*1024))+"M");serverInfoVo.setJvmFreeMemory((int)(runTime.freeMemory()/(1024*1024))+"M");//数据库信息findDatabase(serverInfoVo);dto.setServerInfoVo(serverInfoVo);} catch (Exception e) {e.printStackTrace();}
}//数据库连接信息
public void findDatabase(ServerInfoVo serverInfoVo){try{PropertiesUtil propertiesUtil = PropertiesUtil.getInstance("hibernate.properties");//读取配置文件的连接信息String driver = propertiesUtil.getProperty("jdbc.driver");String jdbcUrl = propertiesUtil.getProperty("jdbc.url");serverInfoVo.setJdbcUrl(jdbcUrl);String username = propertiesUtil.getProperty("jdbc.username");String password = propertiesUtil.getProperty("jdbc.password");Class.forName(driver);Connection con = (Connection) DriverManager.getConnection(jdbcUrl,username,password);DatabaseMetaData metaData = (DatabaseMetaData) con.getMetaData();serverInfoVo.setDatabaseType(metaData.getDatabaseProductName());serverInfoVo.setDatabaseVersion(metaData.getDatabaseProductVersion());serverInfoVo.setDatabaseDriver(metaData.getDriverName());serverInfoVo.setDriverVersion(metaData.getDriverVersion());}catch(Exception e){e.printStackTrace();}
}

显示效果如下:

上诉方案主要讲解服务器信息的实现方法,不要全抄代码,部分无关紧要的代码并未上传,仅供参考,谢谢!

java获取服务器信息相关推荐

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

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

  2. java获取服务器信息返回前端,java程序获取linux服务器进程信息

    搜索了很多关于获取Linux的信息,但是没有发现获取linux服务器的进程信息详细说明. 在这里求解一下,能否在java代码中实现读取代码执行的本机linux服务器中的进程信息? 该问题又分为三个小问 ...

  3. java 获取服务器信息

    通过使用第三方开源jar包sigar.jar我们可以获得本地的信息 1.下载sigar.jar sigar官方主页 sigar-1.6.4.zip 2.按照主页上的说明解压包后将相应的文件copy到j ...

  4. java获取服务器信息(siger)

    1.首先下载siger http://sourceforge.net/projects/sigar/files/latest/download?source=files 2. 红线的jar包导入 pa ...

  5. java 获取远程服务器信息,java 远程获取服务器信息

    java 远程获取服务器信息 内容精选 换一换 已成功登录Java性能分析.待安装Guardian的服务器已开启sshd.待安装Guardian的服务器已安装JRE,JRE版本要求为Huawei JD ...

  6. 获取项目服务器ip,java获取服务器ip地址

    java获取服务器ip地址 内容精选 换一换 如果IP经过NAT/WAF,则只能获取到NAT/WAF转化后的IP地址,无法获取到NAT/WAF前的IP地址.如果客户端为容器,只能获取到容器所在主机的I ...

  7. 获取服务器信息info

    <html><head><meta http-equiv="content-type" content="text/html; charse ...

  8. 网狐app端获取服务器信息,获取服务器信息 网狐客户端

    获取服务器信息 网狐客户端 内容精选 换一换 华为云帮助中心,为用户提供产品简介.价格说明.购买指南.用户指南.API参考.最佳实践.常见问题.视频帮助等技术文档,帮助您快速上手使用华为云服务. 帐户 ...

  9. java 获取方法_Java 反射理解(三)-- Java获取方法信息

    Java 反射理解(三)-- Java获取方法信息 基本的数据类型.void关键字,都存在类类型. 举例如下: public class ClassDemo2 { public static void ...

最新文章

  1. 【多线程】0.理解一下5种IO模型、阻塞IO和非阻塞IO、同步IO和异步IO
  2. 【深度学习的数学】为什么用二次代价函数,误差越大,参数调整幅度越小?
  3. Delphi将输入汉字自动产生拼音简码
  4. animation动画不生效_SwiftUI动画(1)之Animatable
  5. Norflash寿命以及失效模式总结
  6. 2021了,不会还有测试人员认为Jmeter就等于性能测试吧!
  7. java 二分_java二分查找算法
  8. java batik svg_java使用batik转换svg文件
  9. 魔兽十区服务器人最多,十区毁灭计划 新一轮wow大服务器实装公告
  10. input 标签的属性class是什么作用?
  11. 一种用于指导模拟 IC 布局的定制图神经网络模型
  12. HDRP UI上渲染模型的解决方式及常见问题
  13. Oracle 11.2.0.1 rac升级到11.2.0.4
  14. SOM-TL437x是基于TI Sitara系列AM4376/AM4379 ARM Cortex-A9高性能低功耗处理器设计的工业级核心板
  15. go开发中遇到的问题:the ntvdm cpu has encountered an illegal instruction
  16. 百度计算机调试员论文,基于西门子工业软件的仿真专业系统设计一阶惯性加纯滞后对象百度精.doc...
  17. Softer-NMS 论文笔记
  18. C++.02: Visual Studio 2022 文件筛选器与虚拟目录
  19. python保存的代码在哪里_Python保存程序
  20. windows、Linux、VxWorks 下errno含义

热门文章

  1. 微信公众号开发账号申请以及菜单配置。
  2. 第六届蓝桥杯 四阶幻方
  3. Win11右键菜单不折叠的设置方法
  4. MongoDB 芒果数据库简介安装与基本操作(1)
  5. 利用pyproj将经纬度投影为平面坐标以及地理坐标系背景知识
  6. [VS2019]如何弄多项目
  7. 数学笔记:集合运算性质的证明,有理数集合的性质
  8. 一节更比六节强,特斯拉或将推出可续航100万英里的电池
  9. 简易的Android绘图程序
  10. Qt 添加MSVC2017编译器(2022年保姆级教程,不安装完整VS)