1:Sigar用作windows/linux的硬件资源监控,可嵌入到Java程序中.
2: 下载地址: http://sourceforge.net/projects/sigar/files/sigar/1.6/
3: 下载后解压,将sigar.jar 及连接文件:
sigar-amd64-winnt.dll,sigar-x86-winnt.dll,libsigar-amd64-linux.so,libsigar-x86-linux.so
放到webapp\lib目录下
4:查看代码:
hyperic-sigar-1.6.4\bindings\java\examples\java
5:将代码复制到eclipse中执行即可.
示例代码:
Controller:
import java.text.DecimalFormat; import java.util.Map; import org.hyperic.sigar.CpuPerc; import org.hyperic.sigar.FileSystem; import org.hyperic.sigar.FileSystemUsage; import org.hyperic.sigar.Mem; import org.hyperic.sigar.NetFlags; import org.hyperic.sigar.NetInterfaceConfig; import org.hyperic.sigar.OperatingSystem; import org.hyperic.sigar.Sigar; import org.hyperic.sigar.Swap; import org.springframework.stereotype.Controller; import org.springframework.ui.ModelMap; import org.springframework.web.bind.annotation.RequestMapping; import com.google.common.collect.Maps; @Controller @RequestMapping("hardware") public class HardwareController { @RequestMapping("monitor") public String monitor(ModelMap modelMap) { try { Map<String, Map<String, String>> allData = Maps.newLinkedHashMap(); modelMap.put("allData", allData); // 总信息 Sigar sigar = new Sigar(); double divider2 = 1024 * 1024; double divider3 = 1024 * 1024 * 1024; DecimalFormat df = new DecimalFormat("#0.00"); // 系统信息 OperatingSystem os = OperatingSystem.getInstance(); Map<String, String> sysData = Maps.newLinkedHashMap(); sysData.put("系统名称:", os.getName()); sysData.put("系统位数:", os.getDataModel()); sysData.put("系统架构:", os.getArch()); allData.put("系统信息:", sysData); // CPU信息 CpuPerc[] cpus = sigar.getCpuPercList(); Map<String, String> cpuData = Maps.newLinkedHashMap(); for(int i=0;i<cpus.length;i++) { cpuData.put("CPU" + i, CpuPerc.format(cpus[i].getCombined())); } allData.put("CPU信息:", cpuData); // 内存信息 Mem mem = sigar.getMem(); Map<String, String> memData = Maps.newLinkedHashMap(); double memTotal = ((double)mem.getTotal() / divider3); double memUsed = ((double)mem.getUsed() / divider3); double memFree = ((double)mem.getFree() / divider3); memData.put("内存总数", df.format(memTotal) + "G"); memData.put("内存使用量", df.format(memUsed) + "G"); memData.put("内存剩余量", df.format(memFree) + "G"); allData.put("内存信息:", memData); // 交换区信息 Swap swap = sigar.getSwap(); Map<String, String> swapData = Maps.newLinkedHashMap(); double swapTotal = ((double)swap.getTotal() / divider3); double swapUsed = ((double)swap.getUsed() / divider3); double swapFree = ((double)swap.getFree() / divider3); swapData.put("交换区总数", df.format(swapTotal) + "G"); swapData.put("交换区使用量", df.format(swapFree) + "G"); swapData.put("交换区剩余量", df.format(swapUsed) + "G"); allData.put("交换区信息:", swapData); // 硬盘信息: FileSystem fileSystems[] = sigar.getFileSystemList(); Map<String, String> fileSystemData = Maps.newLinkedHashMap(); for(FileSystem fileSystem : fileSystems) { if(!"cdrom".equals(fileSystem.getTypeName())) { fileSystemData.put("<br/>硬盘[" + fileSystem.getDirName() + "]信息", " "); FileSystemUsage fileSystemUsage = sigar.getFileSystemUsage(fileSystem.getDirName()); fileSystemData.put("硬盘[" + fileSystem.getDirName() + "]总量", df.format((double)fileSystemUsage.getTotal()/divider2) + "G"); fileSystemData.put("硬盘[" + fileSystem.getDirName() + "]使用量", df.format((double)fileSystemUsage.getUsed()/divider2) + "G"); fileSystemData.put("硬盘[" + fileSystem.getDirName() + "]可用量", df.format((double)fileSystemUsage.getAvail()/divider2) + "G"); } } allData.put("硬盘信息:", fileSystemData); String[] netinterfaces = sigar.getNetInterfaceList(); Map<String, String> netinterfaceData = Maps.newLinkedHashMap(); for (int i = 0; i < netinterfaces.length; i++) { NetInterfaceConfig cfg = sigar.getNetInterfaceConfig(netinterfaces[i]); if (NetFlags.LOOPBACK_ADDRESS.equals(cfg.getAddress()) || (cfg.getFlags() & NetFlags.IFF_LOOPBACK) != 0 || NetFlags.NULL_HWADDR.equals(cfg.getHwaddr())) {continue;} netinterfaceData.put("<br/>网卡[" + cfg.getName() + "]信息", " "); netinterfaceData.put("名称" + cfg.getName(), cfg.getName()); netinterfaceData.put("IP地址" + cfg.getName(), cfg.getAddress()); netinterfaceData.put("网关广播地址" + cfg.getName(), cfg.getBroadcast()); netinterfaceData.put("网卡Mac地址" + cfg.getName(), cfg.getHwaddr()); netinterfaceData.put("子网掩码" + cfg.getName(), cfg.getNetmask()); } allData.put("网络信息:", netinterfaceData); return "system/hardware/monitor"; } catch (Exception e) { return "error"; } } }
Jsp:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ include file="/tags.jsp"%> <table style="width: 100%; margin: 17px; padding: 11px;"> <c:forEach var="d" items="${allData}"> <tr> <td> <b>${d.key}</b> </td> <td> <c:forEach var="k" items="${d.value}" varStatus="vs"> ${k.key} : ${k.value} <c:if test="${vs.index!=(fn:length(d.value)-1)}"> --------- </c:if> </c:forEach> </td> </tr> <tr><td colspan="2"> </td></tr> </c:forEach> </table>