# spring-boot-sigar **Repository Path**: mbigger/spring-boot-sigar ## Basic Information - **Project Name**: spring-boot-sigar - **Description**: No description available - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2019-04-18 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## 基于`Sigar`的系统信息收集与展示 ### 0. 什么是`Sigar` `Sigar`全名是`System Information Gatherer And Reporter`,中文名是系统信息收集和报表工具。 `Sigar`是`Hyperic-hq`产品的基础包,是`Hyperic HQ`主要的数据收集组件。它用来从许多平台收集系统和处理信息. 这些平台包括:`Linux, Windows, Solaris, AIX, HP-UX, FreeBSD and Mac OSX`. `Sigar`有`C`,`C#`,`Java`和`Perl API`,java版的API为`sigar.jar`, `sigar.jar`的底层是用`C`语言编写的,它通过本地方法来调用操作系统`API`来获取系统相关数据。 注意:Sigar为不同平台提供了不同的库文件.典型的: - `windows`平台: `sigar-x86-winnt.dll`或`sigar-amd64-winnt.dll` - `linux`平台:`libsigar-x86-linux.so`或`libsigar-amd64-linux.so` - `solaris`平台: `libsigar-x86-solaris.so`或`libsigar-sparc-solaris.so`或`libsigar-sparc64-solaris.so` - `64位`平台:分为至强的`libsigar-ia64-linux.so`和`AMD`的`libsigar-amd64-linux.so` `Sigar API` 提供一个方便的接口来收集系统信息,如: - `CPU`信息:包括基本信息(`vendor`、`model`、`mhz`、`cacheSize`)和统计信息(`user`、`sys`、`idle`、`nice`、`wait`) - 文件系统信息:包括`Filesystem`、`Size`、`Used`、`Avail`、`Use%`、`Type` - 事件信息:类似`Service Control Manager` - 内存信息:物理内存和交换内存的总数、使用数、剩余数;RAM的大小 - 网络信息:包括网络接口信息和网络路由信息 - 进程信息:包括每个进程的内存、CPU占用数、状态、参数、句柄 - `IO`信息:包括`IO`的状态,读写大小等 - 服务状态信息 - 系统信息:包括操作系统版本,系统资源限制情况,系统运行时间以及负载,JAVA的版本信息等 ### 1. 为什么要使用`Sigar` - 便于多语言集成,方面使用 - 多平台支持,几乎支持现在所有的主流操作系统,兼容性好 - 开箱即用,快速集成到项目中,不用关心底层实现细节,就可以利用其提供的API开发相关功能 ### 2. 在`Java`项目中安装`Sigar` 1. Maven项目导入 ```xml org.fusesource sigar 1.6.4 ``` 2. 动态链接库导入 在项目的`dependency`文件见下,将将压缩包`hyperic-sigar-1.6.4.zip`中`sigar-bin/lib/sigar-x86-winnt.dll`放入JDK或JRE的当前bin目录下或系统的`system32`目录下,不同的系统以来的动态链接库名称不同,如果没有引入,程序启动时会报错,可以根据报错信息中的提示,在压缩包中找到对应文件并引入,不同的平台具体以来的文件名称可以在`dependency/sigar1.pdf`中找到。 未引入动态链接库时的报错信息,示例如图,不同平台紫色方框中的名称不同, 下图错误在运行`JUnit`测试用例时产生,和生产环境的程序运行错误会有出入: ![报错信息](/images/dll.png) 3. 现在可以开始使用`Sigar`了 `Sigar`使用`C`语言编写,但是有众多语言的绑定,`Java`便是其中之一,`Sigar`使用JNI来调用远程的动态链接库,这也是我们需要引入动态链接库的原因,现在,通过`Java`的`Sigar`对象,我们能就可以获取系统的信息了。 ### 3. 监测指标说明 1. CPU占用率相关的概念 ``` us, user: time running un-niced user processes 表示CPU执行用户进程的时间,包括nices时间。通常期望用户空间CPU越高越好 sy, system: time running kernel processes 表示CPU在内核运行时间,包括IRQ和softirq时间。系统CPU占用率高,表明系统某部分存在瓶颈。通常值越低越好 ni, nice: time running niced user processes 系统调整进程优先级所花费的时间 id, idle: time spent in the kernel idle handler 系统处于空闲期,等待进程运行 wa, IO-wait: time waiting for I/O completion CPU在等待I/O操作完成所花费的时间。系统不应该花费大量时间来等待I/O操作,否则就说明I/O存在瓶颈 hi: time spent servicing hardware interrupts 系统处理硬中断所花费的时间 si: time spent servicing software interrupts 系统处理软中断中断所花费的时间 st: time stolen from this vm by the hypervisor 被强制等待(involuntary wait)虚拟CPU的时间,此时hypervisor在为另一个虚拟处理器服务 ``` ![top](/images/top.png) ### 5. 技术选型 - spirng boot - sigar - highcharts ### 5. 效果展示 ![PC端效果](/images/vs.png) ![手机端1](/images/mobile-1.jpg) ![手机端2](/images/mobile-2.jpg) ![手机端3](/images/mobile-3.jpg) ![手机端4](/images/mobile-4.jpg) ### 6. 待完善 - 持久化 - 内存利用率页面 - 磁盘利用率页面 - 阈值告警 ### 参考资料 - [Sigar详细介绍](http://www.voidcn.com/article/p-bwkeehqp-zw.html) - [sigar路径配置](https://blog.csdn.net/qq_40006446/article/details/81296565) - [Highcharts](https://www.highcharts.com.cn/)