参考:

使用Sigar监控系统性能

demo用的这个的,jar包也是,也可以从网上自己下载。

这里记录下自己遇到的坑。

最终的项目结构,和原作者的差不多,这里只获取盘符信息。

创建项目的时候也别需要注意:

到底选择是jdk还是jre,不过最终都要拷贝dll文件到bin目录下面,这里工具类就是SigarUtils.java

jdk:

jre:

SigarUtils.java

部署到正式项目中,其实只需要执行一次,初始化的时候执行。bin目录中拷贝以后就可以了。

特别注意:这里区分了不同的系统,不同的系统位数。考虑的相当全面了!!!

Windows:将sigar.jar包放到classpath下,将sigar-amd64-winnt.dll放到环境变量java.library.path下。

Linux:将sigar.jar包放到classpath下,将libsigar-x86-linux.so放到环境变量java.library.path下。


public class SigarUtils {/*** 使代码生效需要把一些对应的批处理文件放到java的bin目录下,也就是jdk的bin目录下,不能手动添加,并且分别考虑win和linux系统。* * Windows:将sigar.jar包放到classpath下,将sigar-amd64-winnt.dll放到环境变量java.library.path下。Linux:将sigar.jar包放到classpath下,将libsigar-x86-linux.so放到环境变量java.library.path下。* */private final static String WINDOWS64 = "\\sigar-amd64-winnt.dll";private final static String WINDOWS32 = "\\sigar-x86-winnt.dll";private final static String LINUX32 = "\\libsigar-x86-linux.so";private final static String LINUX64 = "\\libsigar-amd64-linux.so";/*** 获取操作系统类型* * @return*/public static String getOsType() {String osName = System.getProperty("os.name");if (!isNull(osName)) {System.out.println("osName:" + osName);String sysName = "";if (osName.toLowerCase().startsWith("windows") || osName.toLowerCase().startsWith("win")) {sysName = "windows";} else if (osName.toLowerCase().startsWith("linux")) {sysName = "linux";}return sysName;}return "UnknownSys";}//操作系统+单位数public static String getSysBit() {String systemtype = getOsType(); // 获取操作系统类型if (systemtype.equalsIgnoreCase("windows")) { // 检测到系统为Windows系统String arch = System.getenv("PROCESSOR_ARCHITECTURE");String wow64Arch = System.getenv("PROCESSOR_ARCHITEW6432");if (arch.endsWith("64") || wow64Arch != null && wow64Arch.endsWith("64")) {return systemtype + " 64";} else {return systemtype + " 32";}} else if (systemtype.equalsIgnoreCase("linux")) { // 检测到系统为Linux系统try {Process process = Runtime.getRuntime().exec("getconf LONG_BIT");BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(process.getInputStream()));String s = bufferedReader.readLine();if (s.contains("64")) {return systemtype + " 64";} else {return systemtype + " 32";}} catch (IOException e) {return systemtype + " UnknownBit";}}return systemtype + " UnknownBit";}/*** 判断对象是否为空* * @param obj* @return*/public static boolean isNull(Object obj) {if (obj instanceof String)return obj == null || "".equals(obj);if (obj instanceof Collection)return ((Collection) obj).size() <= 0;if (obj instanceof Map)return ((Map) obj).size() <= 0;return obj == null;}public static String getJavaBinPath() {String libraryPath = System.getProperty("java.library.path");return libraryPath.substring(0, libraryPath.indexOf(";"));}public static String getUsrDirPath() {return System.getProperty("user.dir") + "\\sigar-dll";}private static void copyFile(String source, String dest) {copyFile(new File(source), new File(dest));}private static void copyFile(File source, File dest) {FileChannel inputChannel = null;FileChannel outputChannel = null;try {try {inputChannel = new FileInputStream(source).getChannel();outputChannel = new FileOutputStream(dest).getChannel();outputChannel.transferFrom(inputChannel, 0, inputChannel.size());} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}} finally {try {inputChannel.close();outputChannel.close();} catch (IOException e) {System.out.println("无该目录访问权限,请手动拷贝" + dest);e.printStackTrace();}}}public static void chooseFile() {String system = getSysBit();String srcFile = getUsrDirPath();String descFile = getJavaBinPath();// windows操作系统单位数未知if (system.indexOf("windows") != -1 && system.indexOf("UnknownBit") == -1) {copyFile(srcFile + WINDOWS64, descFile + WINDOWS64);copyFile(srcFile + WINDOWS32, descFile + WINDOWS32);return;}if (system.indexOf("windows") != -1 && system.endsWith("32")) {copyFile(srcFile + WINDOWS32, descFile + WINDOWS32);} else {copyFile(srcFile + WINDOWS64, descFile + WINDOWS64);}if (system.indexOf("linux") != -1 && system.indexOf("UnknownBit") == -1) {copyFile(srcFile + LINUX64, descFile + LINUX64);copyFile(srcFile + LINUX32, descFile + LINUX32);return;}if (system.indexOf("linux") != -1 && system.endsWith("32")) {copyFile(srcFile + LINUX32, descFile + LINUX32);} else {copyFile(srcFile + LINUX64, descFile + LINUX64);}if (system.indexOf("UnknownSys") != -1) {System.out.println("==================未知操作系统,请手动选择命令文件!=================");}}public static void main(String[] args) {//拷贝dll文件到jdk(执行一次)
//      chooseFile();System.out.println(System.getProperty("java.library.path"));System.out.println("getSysBit:" + getSysBit());System.out.println("getJavaBinPath:" + getJavaBinPath());}
}

RuntimeUtils.java

主要类,通过调用dll,获取系统盘符信息。

public class RuntimeUtils {public static void main(String[] args) {try {//文件系统信息System.out.println(getDiskInfo()[0].toString());} catch (Exception el) {el.printStackTrace();}}public static DiskInfo[] getDiskInfo() throws Exception{Sigar sigar = new Sigar();FileSystem fslist[] = sigar.getFileSystemList();  //分区DiskInfo[] diskInfos = new DiskInfo[fslist.length];for (int i = 0; i < fslist.length; i++) {System.out.println("分区的盘符名称" + i);DiskInfo diskInfo = new DiskInfo();FileSystem fs = fslist[i];// 分区的盘符名称diskInfo.setDiskName(fs.getDevName());// 分区的盘符类型diskInfo.setDiskType(fs.getSysTypeName());FileSystemUsage usage = null;usage = sigar.getFileSystemUsage(fs.getDirName());switch (fs.getType()) {case 0:  // TYPE_UNKNOWN :未知break;case 1: // TYPE_NONEbreak;case 2:   // TYPE_LOCAL_DISK : 本地硬盘// 文件系统总大小diskInfo.setTotalDisk(usage.getTotal()/1024); //单位 MSystem.out.println(fs.getDevName() + "总大小:    "+ usage.getTotal() + "KB");// 文件系统剩余大小diskInfo.setFreeDisk(usage.getFree()/1024);//System.out.println(fs.getDevName() + "剩余大小:    "+ usage.getFree() + "KB");// 文件系统已经使用量//System.out.println(fs.getDevName() + "已经使用量:    "+ usage.getUsed() + "KB");double usePercent = usage.getUsePercent() * 100D;diskInfo.setResUseAge(usePercent+ "%");// 文件系统资源的利用率System.out.println(fs.getDevName() + "资源的利用率:    " + usePercent+ "%");break;case 3:// TYPE_NETWORK :网络break;case 4:// TYPE_RAM_DISK :闪存break;case 5:// TYPE_CDROM :光驱break;case 6:// TYPE_SWAP :页面交换break;}diskInfo.setReadDisk(usage.getDiskReads());diskInfo.setWriteDisk(usage.getDiskWrites());diskInfos[i] = diskInfo;//System.out.println(fs.getDevName() + "读出:    "+ usage.getDiskReads());//System.out.println(fs.getDevName() + "写入:    "+ usage.getDiskWrites());}return diskInfos;}
}

DiskInfo.java

封装盘符信息的实体类,方便数据传递。

/*** 磁盘信息*/
public class DiskInfo {private String diskName;private String diskType;private long totalDisk;private long freeDisk;private long useDisk;private String resUseAge;private long readDisk;private long writeDisk;public String getDiskName() {return diskName;}public void setDiskName(String diskName) {this.diskName = diskName;}public String getDiskType() {return diskType;}public void setDiskType(String diskType) {this.diskType = diskType;}public long getTotalDisk() {return totalDisk;}public void setTotalDisk(long totalDisk) {this.totalDisk = totalDisk;}public long getFreeDisk() {return freeDisk;}public void setFreeDisk(long freeDisk) {this.freeDisk = freeDisk;}public long getUseDisk() {return useDisk;}public void setUseDisk(long useDisk) {this.useDisk = useDisk;}public String getResUseAge() {return resUseAge;}public void setResUseAge(String resUseAge) {this.resUseAge = resUseAge;}public long getReadDisk() {return readDisk;}public void setReadDisk(long readDisk) {this.readDisk = readDisk;}public long getWriteDisk() {return writeDisk;}public void setWriteDisk(long writeDisk) {this.writeDisk = writeDisk;}@Overridepublic String toString() {return "DiskInfo [diskName=" + diskName + ", diskType=" + diskType+ ", totalDisk=" + totalDisk + ", freeDisk=" + freeDisk+ ", useDisk=" + useDisk + ", resUseAge=" + resUseAge+ ", readDisk=" + readDisk + ", writeDisk=" + writeDisk + "]";}}

Sigar监控系统性能信息相关推荐

  1. Linux常用的几个监控系统性能的命令

    除top命令和ps命令外.以下几个用于cpu的命令 1.vmstat命令 该命令可以显示关于系统各种资源之间相关性能的简要信息,这里我们主要用它来看CPU的一个负载情况. 下面是vmstat命令在某个 ...

  2. Java-SpringBoot-使用Sigar采集设备信息

    文章目录 Java-SpringBoot-使用Sigar采集设备信息 一.Sigar依赖 二.项目讲解 1. 项目结构图 2. 数据传递实体类 3. Sigar采集类 4. Controller控制类 ...

  3. 【智慧机房】机房动环监控系统性能

    动环监控系统又被称为机房动环监控系统.动环监控系统等,简称为"动环",对机房有着不可缺失的重要性,方便了企业管理,节省人力物力,为企业创造更大的收益,保障机房的规范化管理. 机房动 ...

  4. 服务器实时状态检测源码,开源运维监控框架Netdata——实时监控系统性能

    开源运维监控框架Netdata--实时监控系统性能 开源运维监控框架Netdata--实时监控系统性能 作为一个Linux的SA,很有必要掌握一个专门的系统监控工具,以便能随时了解系统资源的占用情况. ...

  5. nagios全攻略(三)----使用插件监控更多信息

    三. 使用命令和插件监控更多信息<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office&quo ...

  6. 系统性能信息模块篇psutil之获取系统性能信息

    声明:本人对自动化运维技术比较感兴趣,于8月购买了一本为名<Python自动化运维技术与最佳实践>的书籍,准备将自己的学习过程记录如下,仅供学习之用. 环境介绍: 操作系统:redhat6 ...

  7. 第三十五章 使用 ^PERFMON 监控系统性能 - Clear

    文章目录 第三十五章 使用 ^PERFMON 监控系统性能 - Clear Clear Report `Collect` Report Examples 第三十五章 使用 ^PERFMON 监控系统性 ...

  8. 第三十三章 使用 ^PERFMON 监控系统性能

    文章目录 第三十三章 使用 ^PERFMON 监控系统性能 使用 `^PERFMON` 运行 `^PERFMON` 第三十三章 使用 ^PERFMON 监控系统性能 ^PERFMON 是一个控制 MO ...

  9. mysqld_exporter监控mysql信息

    mysqld_exporter监控mysql信息 一.背景 二.prometheus接入mysqld_exporter 1.安装mysqld_exporter 2.创建mysqld_exporter用 ...

最新文章

  1. XCode 导入头文件不提示解决
  2. asp.net 调用vc dll_“双通道”独立通讯,稀有钛膜单元,击音运动果VC真无线耳机...
  3. 一些SqlServer常见和入门操作2
  4. 三星s10能升级android11,三星 S10+手机已在测试 Android 11 系统
  5. PST转换软件 v6.3
  6. 用css3实现Social Media Buttons
  7. UNIX/Linux系统取证之信息采集案例
  8. 梦幻西游网页版服务器互通吗,梦幻西游网页版开服伙伴
  9. Java连接HBase数据库,操作HBase数据库
  10. 程序员如何提升开发团队的协作效率和质量?
  11. 遗传算法(Genetic Algorithm)从了解到实例运用(上)(python)
  12. 李迅雷+趋势的力量+K型分化时代如何赢取超额收益
  13. Python | 微信自动回复祝福语
  14. crc-itu java实现_JAVA编程心得-JAVA实现CRC-CCITT(XMODEM)算法
  15. 程序员职场起点6要素 前辈们那些经历告诉你
  16. java 发送Bearer token请求
  17. ibili的使用教程
  18. 2020年ESA中国区10m地表覆盖数据下载
  19. 东原晴天见版《花儿与少年》带你发现旅行的意义
  20. Mac使用技巧:怎样打开、关闭屏幕共享!

热门文章

  1. ipad可以用的手写笔,平板触控笔哪款好用
  2. u大师u盘装系统win7_钻研Terrans Force电脑u盘重装系统win7_Win7 教程
  3. c++转python
  4. DELL E7240超极本
  5. FCC首部电影《招邪》即将开拍 网友:很期待
  6. JSON之dumps和loads的区别
  7. NC65 REST接口开发及调试
  8. PHP虚拟机HHVM 4.0.0,让PHP飞--HHVM虚拟机初探(一)
  9. EasyGUI 详细解读
  10. 听说三年前那些月入30K的程序员都是这样开始轻松构建算法交易机器:一点python基础+一点运气