做产品的淘宝客网站,免费的开源网站,wordpress vps,网站集约化建设2019年4月最近在筹划做一个监控系统。其中就要获取主机信息#xff0c;其中遇到一些问题。在此做个记录#xff0c;以便以后查阅。在该监控系统中#xff0c;想要做到主机的CPU、内存、磁盘、网络、线程、JVM内存、JVM GC 等维度的监控#xff0c;JVM方面的监控还好说#xff0c;直…最近在筹划做一个监控系统。其中就要获取主机信息其中遇到一些问题。在此做个记录以便以后查阅。在该监控系统中想要做到主机的CPU、内存、磁盘、网络、线程、JVM内存、JVM GC 等维度的监控JVM方面的监控还好说直接用JMX做就行了关键是主机信息不好做监控JDK没有直接的方案获取系统主机信息。在刚开始想到了以下几种方式获取主机维度的信息。image.png一、命令行刚开始想的是用最常用的命令行获取主机维度的信息具体做法是针对不同的系统写不同的命令。比如说Linux系统使用TOP命令就能获取到CPU、内存等方面的信息。top -b -n 1执行该TOP命令就能获取到CPU、内存等维度的信息Tasks: 515 total, 1 running, 511 sleeping, 3 stopped, 0 zombieCpu(s): 14.5%us, 5.3%sy, 0.0%ni, 77.0%id, 0.8%wa, 0.0%hi, 2.4%si, 0.0%stMem: 65779104k total, 62037048k used, 3742056k free, 425804k buffersSwap: 0k total, 0k used, 0k free, 21948492k cached这种方式虽然好但是需要针对不同系统做兼容。为了将懒字发挥到极致于是我就开始寻找现有的开源组件。然后找到了一个sigar的东西貌似这个在业界内应用还挺广的。image.png二、sigarsigar的api用起来也挺方便的简单且使用人数多。/ CPU数量(单位个)int cpuLength sigar.getCpuInfoList().length;print(cpuLength);// CPU的总量(单位HZ)及CPU的相关信息CpuInfo infos[] sigar.getCpuInfoList();for (int i 0; i infos.length; i) {// 不管是单块CPU还是多CPU都适用CpuInfo info infos[i];print(mhz info.getMhz());// CPU的总量MHzprint(vendor info.getVendor());// 获得CPU的卖主如Intelprint(model info.getModel());// 获得CPU的类别如Celeronprint(cache size info.getCacheSize());// 缓冲存储器数量}但是sigar需要根据不同的系统下载不同的库文件倾入性较高。sigar 库文件windows平台:sigar-x86-winnt.dlllinux平台:libsigar-x86-linux.so或solaris平台: libsigar-x86-solaris.so或libsigar-sparc-solaris.so或libsigar-sparc64-solaris.so64位平台:分为至强的libsigar-ia64-linux.so和AMD的libsigar-amd64-linux.so,sigar-amd64-winnt.dll这样就让我很为难了于是继续在网上寻找。终于找到了oshi。三、oshi看看oshi是怎么获取系统信息的吧首先引入jar包com.github.oshioshi-core${oshi.version}然后开撸// 获取主机信息SystemInfo systemInfo new SystemInfo();// 获取操作系统信息OperatingSystem operatingSystem systemInfo.getOperatingSystem();operatingSystem.getNetworkParams().getHostName();operatingSystem.getFamily();operatingSystem.getVersion().getVersion();operatingSystem.getVersion().getBuildNumber();operatingSystem.getBitness();operatingSystem.getProcessCount();operatingSystem.getThreadCount();就是这么简单不需要不同系统引入不同的库文件也不用自己做系统兼容。oshi自己做了兼容目前大概兼容些这些系统 Linux, Windows, Solaris, AIX, HP-UX, FreeBSD and Mac OSX。四、对比以上几种方式大概可以做个这样的总结命令行灵活度高兼容性强但是如果要兼容多个平台的话自己做还是有些麻烦。sigar社区活跃度高参考文档全面麻烦在于需要不同平台引入不同的库文件。oshi拿来主义使用方便缺点在于文档少。不过个人认为看看github上的文档就够了使用过程也没有什么坑。综上因为我个人在开发的时候选择的是oshi。