Sigar java 伺服器資訊探針、監控
package org.fh.controller.tools; import java.net.InetAddress; import java.util.HashMap; import java.util.Map; import java.util.Properties; import org.fh.controller.base.BaseController; import org.fh.entity.PageData; import org.hyperic.sigar.CpuInfo; import org.hyperic.sigar.CpuPerc; import org.hyperic.sigar.FileSystem; import org.hyperic.sigar.FileSystemUsage; import org.hyperic.sigar.Mem; import org.hyperic.sigar.NetInterfaceConfig; import org.hyperic.sigar.NetInterfaceStat; import org.hyperic.sigar.Sigar; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; /** * 說明:伺服器資訊監控 * 作者:FH Admin * from:fhadmin.cn */ @Controller @RequestMapping("/serverRunstate") public class ServerRunstateController extends BaseController { /**獲取常量資料 * @return */ @RequestMapping(value="/getData") @ResponseBody public Object getData() throws Exception{ Map<String,Object> map = new HashMap<String,Object>(); Sigar sigar = new Sigar(); String errInfo = "success"; PageData pd = new PageData(); property(pd); //基本資訊 gethardDiskData(pd,sigar); //硬碟使用情況 map.put("pd", pd); map.put("result", errInfo); return map; } /**獲取事實資料 * @return */ @RequestMapping(value="/realTimeData") @ResponseBody public Object realTimeData() throws Exception{ Map<String,Object> map = new HashMap<String,Object>(); Sigar sigar = new Sigar(); String errInfo = "success"; PageData pd = new PageData(); getJvmMemoryData(pd); //JVM記憶體 getServerMemoryData(pd,sigar); //伺服器記憶體 getCpuData(pd,sigar); //CPU map.put("pd", pd); map.put("result", errInfo); return map; } /**獲取網速 * @return */ @RequestMapping(value="/networkspeed") @ResponseBody public Object networkspeed() throws Exception{ Map<String,Object> map = new HashMap<String,Object>(); Sigar sigar = new Sigar(); String errInfo = "success"; PageData pd = new PageData(); long[] fhbytes1 = getNet(sigar); Thread.sleep(1000); long[] fhbytes2 = getNet(sigar); long rxspeed = fhbytes2[0] - fhbytes1[0]; long txspeed = fhbytes2[1] - fhbytes1[1]; pd.put("rxspeed", (double) Math.round((rxspeed/2014.0) * 100) / 100); //下載網速 pd.put("txspeed", (double) Math.round((txspeed/1024.0) * 100) / 100); //上傳網速 map.put("pd", pd); map.put("result", errInfo); return map; } /**獲取JVM記憶體資料 * @param pd * @return * @throws Exception */ private PageData getJvmMemoryData(PageData pd){ double byteToMb = 1024.0 * 1024.0; double jvmTotal = 0; double jvmFree = 0; double jvmUse = 0; Runtime rt = Runtime.getRuntime(); jvmTotal = rt.totalMemory() / byteToMb; jvmFree = rt.freeMemory() / byteToMb; jvmUse = jvmTotal - jvmFree; pd.put("totalJvmMemory", (double) Math.round(jvmTotal * 100) / 100); //JVM總記憶體空間 pd.put("useJvmMemory", (double) Math.round(jvmUse * 100) / 100); //JVM已使用的記憶體 return pd; } /**獲取伺服器記憶體資料 * @param pd * @param sigar * @throws Exception */ private void getServerMemoryData(PageData pd, Sigar sigar) throws Exception { double byteToGb = 1024.0 * 1024.0 * 1024.0; double serveotal = 0; double serverUse = 0; Mem mem = sigar.getMem(); serveotal = mem.getTotal() / byteToGb; serverUse = mem.getUsed() / byteToGb; pd.put("totalServerMemory", (double) Math.round(serveotal * 100) / 100); //伺服器總記憶體空間 pd.put("useServerMemory", (double) Math.round(serverUse * 100) / 100); //伺服器已使用的記憶體 } /**獲取伺服器CUP使用率 * @param pd * @param sigar * @throws Exception */ private void getCpuData(PageData pd, Sigar sigar) throws Exception { CpuInfo infos[] = sigar.getCpuInfoList(); CpuPerc cpuList[] = null; cpuList = sigar.getCpuPercList(); double cpuuse = 0; for (int i = 0; i < infos.length; i++) { //多塊或者多核心CPU cpuuse += cpuList[i].getCombined() * 100.00; } pd.put("cpuuse", (double) Math.round(((cpuuse/(infos.length * 100))*100) * 100) / 100 );//使用率 } /**獲取伺服器硬碟情況 * @param pd * @param sigar * @throws Exception */ private void gethardDiskData(PageData pd, Sigar sigar) throws Exception { double byteToGb = 1024.0 * 1024.0; long totalSize = 0; long useSize = 0; FileSystem fslist[] = sigar.getFileSystemList(); for (int i = 0; i < fslist.length; i++) { FileSystem fs = fslist[i]; FileSystemUsage usage = null; usage = sigar.getFileSystemUsage(fs.getDirName()); switch (fs.getType()) { case 0: // TYPE_UNKNOWN :未知 break; case 1: // TYPE_NONE break; case 2: // TYPE_LOCAL_DISK : 本地硬碟 totalSize += usage.getTotal(); //總大小 useSize += usage.getUsed(); //已經使用量 break; case 3:// TYPE_NETWORK :網路 break; case 4:// TYPE_RAM_DISK :快閃記憶體 break; case 5:// TYPE_CDROM :光碟機 break; case 6:// TYPE_SWAP :頁面交換 break; } } pd.put("totalDiskSize",(double) Math.round((totalSize / byteToGb) * 10) / 10); //硬碟總大小 pd.put("useDiskSize",(double) Math.round((useSize / byteToGb) * 10) / 10); //硬碟已使用大小 } /**獲取基礎資訊 * @param pd * @return * @throws Exception */ private PageData property(PageData pd) throws Exception { Runtime r = Runtime.getRuntime(); Properties props = System.getProperties(); InetAddress addr; addr = InetAddress.getLocalHost(); String ip = addr.getHostAddress(); Map<String, String> map = System.getenv(); String userName = map.get("USERNAME");// 獲取使用者名稱 pd.put("userName", userName); //計算機使用者 pd.put("IP", ip); //本地ip地址 pd.put("HostName", addr.getHostName()); //本地主機名 pd.put("availableProcessors", r.availableProcessors()); //JVM可以使用的處理器個數 pd.put("javaversion", props.getProperty("java.version")); //Java的執行環境版本 pd.put("javahome", props.getProperty("java.home")); //Java的安裝路徑 pd.put("javavmversion", props.getProperty("java.vm.specification.version")); //Java的虛擬機器規範版本 pd.put("javavmname", props.getProperty("java.vm.name")); //Java的虛擬機器實現名稱 pd.put("javaclassversion", props.getProperty("java.class.version")); //Java的類格式版本號 pd.put("osarch", props.getProperty("os.arch")); //作業系統的構架 pd.put("userdir", props.getProperty("user.dir")); //使用者的當前工作目錄 return pd; } /**獲取接收位元組數 * @return * @throws Exception */ private static long[] getNet(Sigar sigar) throws Exception { long[] fhbytes = new long[2]; String ifNames[] = sigar.getNetInterfaceList(); for (int i = 0; i < ifNames.length; i++) { String name = ifNames[i]; NetInterfaceConfig ifconfig = sigar.getNetInterfaceConfig(name); if ((ifconfig.getFlags() & 1L) <= 0L) { continue; } NetInterfaceStat ifstat = sigar.getNetInterfaceStat(name); long fhRxBytes = ifstat.getRxBytes(); long fhTxBytes = ifstat.getTxBytes(); if(fhRxBytes > 0) { fhbytes[0] = fhRxBytes; fhbytes[1] = fhTxBytes; return fhbytes; } } fhbytes[0] = 0; fhbytes[1] = 0; return fhbytes; } }
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31558068/viewspace-2854924/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 03 . Prometheus監控容器和HTTP探針應用PrometheusHTTP
- 百問百答第41期:應用效能探針監測原理-Java探針Java
- hyperic-sigar-1.6.4 java獲取軟硬體相關資訊Java
- 百問百答第44期:應用效能探針監測原理-Python探針Python
- 百問百答第43期:應用效能探針監測原理-PHP探針PHP
- 百問百答第45期:應用效能探針監測原理-node JS 探針JS
- ?【Java技術專區】「探針Agent專題」Java Agent探針的技術介紹(1)Java
- Grafana監控騰訊物理資源資訊Grafana
- jmeter 監控伺服器資源 求助!!!JMeter伺服器
- 三維模擬智慧伺服器 —— 資訊保安監控平臺伺服器
- 數字孿生智慧伺服器:資訊保安監控平臺伺服器
- 恆訊科技分析:如何監控伺服器效能?伺服器
- 【Zabbix配置】透過iLO進行Zabbix監控——針對HP伺服器整合伺服器
- Linux下針對伺服器網路卡流量和磁碟的監控指令碼Linux伺服器指令碼
- [java]深入剖析Java效能監控調優視訊教程Java
- Java 監控基礎 - 使用 JMX 監控和管理 Java 程式Java
- 分散式監控系統Zabbix3.4-針對MongoDB效能監控操作筆記分散式MongoDB筆記
- Redis 常用監控資訊命令總結Redis
- Shell 系統資訊監控指令碼指令碼
- kubernetes中的探針
- Kubernetes 探針詳解!
- 恆訊科技分析:什麼是伺服器監控系統?伺服器
- Java程式監控指標Java指標
- Linux伺服器---流量監控ntopLinux伺服器
- Linux伺服器---流量監控webalizerLinux伺服器Web
- Linux伺服器---流量監控MRTGLinux伺服器
- 使用CloudStats監控Linux伺服器CloudLinux伺服器
- Linux伺服器---流量監控bandwidthdLinux伺服器
- prometheus-監控docker伺服器PrometheusDocker伺服器
- Skywalking-04:擴充套件Metric監控資訊套件
- java-jvisualvm遠端監控阿里雲伺服器上的TomcatJavaLVM阿里伺服器Tomcat
- 阿里雲容器Kubernetes監控(一)-資源監控阿里
- MySQL監控-Datadog資料庫監控調研MySql資料庫
- Java監控神器之psi-probe監控Tomcat和應用JavaTomcat
- Kubernetes 存活、就緒探針
- Kubernetes探針踩坑記
- 容器探針-健康檢查
- 七麥資料釋出「版本更新監控」功能 挖掘共性探尋新增長