从零开始搭建自己的网站十九:Springboot配置sigar进行系统运行分析

一个运行JavaWeb项目,我们需要知道这个系统运行的状况,这里我选择用sigar来获取本地系统信息。

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来获取系统相关数据。

1、通过Gradle依赖jar包

compile group: 'org.fusesource', name: 'sigar', version: '1.6.4'

2、添加相应的系统配置文件如win下的sigar-x86-winnt.dll,Linux下的libsigar-x86-linux.so及mac os下的libsigar-universal64-macosx.dylib等文件

在ManagerController添加初始化配置文件代码

//静态代码块
static {
    try {
        initSigar();
    } catch (IOException e) {
        e.printStackTrace();
    }
}
//初始化sigar的配置文件
private static void initSigar() throws IOException {
    SigarLoader loader = new SigarLoader(Sigar.class);
    String lib = null;

    try {
        lib = loader.getLibraryName();
    } catch (ArchNotSupportedException var7) {
        logger.error(var7.getMessage(), var7);
    }
    ResourceLoader resourceLoader = new DefaultResourceLoader();
    Resource resource = resourceLoader.getResource("classpath:/sigar/" + lib);
    if (resource.exists()) {
        InputStream is = resource.getInputStream();
        File tempDir = FileUtil.createTempDirectory();
        BufferedOutputStream os = new BufferedOutputStream(new FileOutputStream(new File(tempDir, lib), false));
        StreamUtil.copy(is, os);
        is.close();
        os.close();
        System.setProperty("org.hyperic.sigar.path", tempDir.getCanonicalPath());
    }
}

3、使用sigar获取系统使用情况

/**
 * 管理台首页
 */
@RequestMapping("/index")
public String index(HttpServletRequest request, Model model) throws IOException {
    String user = (String) request.getAttribute("user");
    model.addAttribute("user", user);
    Sigar sigar;
    try {
        //当前时间
        model.addAttribute("nowTime", DateUtil.getDateTime());
        //应用服务器
        ServletContext servletContext = request.getSession().getServletContext();
        model.addAttribute("servletServer", servletContext.getServerInfo());
        //JDK版本
        model.addAttribute("javaVersion", SystemUtil.getJavaVersion());
        sigar = new Sigar();
        CpuInfo[] cpuInfoList = sigar.getCpuInfoList();
        //CPU信息
        model.addAttribute("cpu", cpuInfoList[0].getVendor() + "(" + cpuInfoList[0].getModel() + ") " + cpuInfoList[0].getMhz() + "MHz x " + cpuInfoList.length + "核");
        //操作系统
        String osname = System.getProperties().getProperty("os.name");
        model.addAttribute("osname", osname);
        //服务器内存
        Mem freeMemory = sigar.getMem();
        model.addAttribute("mem", String.format("%.2fG", new Object[]{Double.valueOf((double) freeMemory.getTotal() / 1.073741824E9D)}));
        //JVM内存
        model.addAttribute("jvmMaxMem", String.format("%.2fM", new Object[]{Float.valueOf((float) Runtime.getRuntime().maxMemory() / 1048576.0F)}));
        //
        model.addAttribute("memUsedPercent", String.format("%.2f", new Object[]{Double.valueOf(freeMemory.getUsedPercent())}));
        //CPU使用
        model.addAttribute("cpuUsed", String.format("%.2f", new Object[]{Double.valueOf(CpuPerc.format(sigar.getCpuPerc().getCombined()).replace("%", ""))}));
        long pid = sigar.getPid();
        long startTime = sigar.getProcTime(pid).getStartTime();
        //系统运行时间
        model.addAttribute("runningTime", DateUtil.friendDuration(System.currentTimeMillis() - startTime));
        //系统内存使用
        long maxMemory2 = Runtime.getRuntime().maxMemory();
        long freeMemory1 = Runtime.getRuntime().freeMemory();
        //JVM内存使用
        model.addAttribute("useableMemeory", String.format("%.2f", new Object[]{Double.valueOf((double) (maxMemory2 - freeMemory1) / ((double) maxMemory2 * 1.0D) * 100.0D)}));
    } catch (SigarException e) {
        logger.error("使用sigar获取服务器信息错误:", e);
    }
    return "manager/index";
}
//时间工具类计算总时间
public static String friendDuration(long ms) {
    short ss = 1000;
    int mi = ss * 60;
    int hh = mi * 60;
    int dd = hh * 24;
    long day = ms / (long) dd;
    long hour = (ms - day * (long) dd) / (long) hh;
    long minute = (ms - day * (long) dd - hour * (long) hh) / (long) mi;
    long second = (ms - day * (long) dd - hour * (long) hh - minute * (long) mi) / (long) ss;
    long milliSecond = ms - day * (long) dd - hour * (long) hh - minute * (long) mi - second * (long) ss;
    StringBuilder str = new StringBuilder();
    if (day > 0L) {
        str.append(day).append("天,");
    }
    if (hour > 0L) {
        str.append(hour).append("小时,");
    }
    if (minute > 0L) {
        str.append(minute).append("分钟,");
    }
    if (second > 0L) {
        str.append(second).append("秒,");
    }
    if (milliSecond > 0L) {
        str.append(milliSecond).append("毫秒,");
    }
    if (str.length() > 0) {
        str = str.deleteCharAt(str.length() - 1);
    }
    return str.toString();
}

4、页面展示

<tr>
  <td>管理员个数:</td>
  <td>1 人</td>
  <td>当前时间:</td>
  <td id="nowTime">${nowTime}</td>
</tr>
<tr>
  <td>CPU:</td>
  <td>${cpu}</td>
  <td>JDK版本:</td>
  <td>${javaVersion}</td>
</tr>
<tr>
  <td>操作系统:</td>
  <td>${osname}</td>
  <td>系统运行时间:</td>
  <td>${runningTime}</td>
</tr>
<tr>
  <td>服务器内存:</td>
  <td>${mem}</td>
  <td>JVM内存:</td>
  <td>${jvmMaxMem}</td>
</tr>
<tr>
  <td>系统内存使用:</td>
  <td>${memUsedPercent}%</td>
  <td>JVM内存使用:</td>
  <td>${useableMemeory}%</td>
</tr>
<tr>
  <td>系统CPU使用:</td>
  <td>${cpuUsed}%</td>
  <td>应用服务器:</td>
  <td>${servletServer}</td>
</tr>

页面情况如下,系统具体使用情况就能看的一目了然。如需其他的数据,可以自行去查看API使用。​


欢迎转载,转载请注明出处 http://www.dingyinwu.com/article/62.html 

如果文章中有任何问题或者可以改进的地方,请大家多提提意见,我会非常感激。




  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Spring Boot是一种用于构建独立的、可扩展的Java应用程序的开发框架。而SIGAR是一个Java库,用于获取系统信息,如CPU使用率、内存使用率、磁盘空间等。集成SIGAR可以让我们在Spring Boot应用程序中获取系统的详细信息。 要在Spring Boot中集成SIGAR,我们首先需要将SIGAR库添加到项目的依赖中。可以通过在pom.xml文件中添加如下依赖来实现: ```xml <dependency> <groupId>org.fusesource</groupId> <artifactId>sigar</artifactId> <version>1.6.4</version> <scope>runtime</scope> </dependency> ``` 添加依赖后,我们可以使用SIGAR库提供的API来获取系统信息。例如,我们可以编写一个类来获取CPU使用率的示例: ```java import org.hyperic.sigar.CpuPerc; import org.hyperic.sigar.Sigar; import org.springframework.stereotype.Component; @Component public class SystemInfo { private Sigar sigar; public SystemInfo() { sigar = new Sigar(); } public double getCpuUsage() { try { CpuPerc cpuPerc = sigar.getCpuPerc(); return cpuPerc.getCombined(); } catch (Exception e) { e.printStackTrace(); return 0.0; } } } ``` 在这个示例中,我们使用了Sigar类和CpuPerc类来获取CPU使用率。通过调用getCpuPerc方法,我们可以得到一个CpuPerc对象,然后通过调用getCombined方法获取CPU的使用率。 在这个类上添加@Component注解可以让Spring Boot自动扫描并将其作为一个Bean进行管理。我们可以在其他地方注入SystemInfo类,并调用getCpuUsage方法来获取CPU使用率。 除了获取CPU使用率,SIGAR库还提供了很多其他的功能,如获取内存使用率、磁盘空间等。使用SIGAR库可以让我们更方便地在Spring Boot应用程序中获取系统信息,帮助我们监控和管理应用程序的性能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值