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 map = new HashMap();

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 map = new HashMap();

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 map = new HashMap();

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 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;

}

}

你可能感兴趣的:(Sigar java 服务器信息探针、监控)