package cc.nonone.serverinfo.common.utils;
import cn.hutool.core.util.NumberUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.google.common.io.Resources;
import org.hyperic.sigar.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.File;
import java.lang.management.ManagementFactory;
import java.lang.management.RuntimeMXBean;
import java.net.InetAddress;
import java.net.NetworkInterface;
import java.net.SocketException;
import java.util.*;
/**
* 获取服务器信息
* @author : nonone
* @date : Created in 2019/9/21 10:37
*/
public class SigarUtil {
private static final Logger logger = LoggerFactory.getLogger(SigarUtil.class);
private static class SigarUtilHolder {
private static final SigarUtil INSTANCE = new SigarUtil();
private static final Sigar Sigar = new Sigar();
}
private SigarUtil() {
try {
String file = Resources.getResource("sigar/.sigar_shellrc").getFile();
File classPath = new File(file).getParentFile();
String path = System.getProperty("java.library.path");
if (OsCheck.getOperatingSystemType() == OsCheck.OSType.Windows) {
path += ";" + classPath.getCanonicalPath();
} else {
path += ":" + classPath.getCanonicalPath();
}
System.setProperty("java.library.path", path);
System.out.println(path);
} catch (Exception e) {
}
}
public static final Sigar getInstance() {
return SigarUtilHolder.Sigar;
}
public static final SigarUtil getSigarUtilInstance() {
return SigarUtilHolder.INSTANCE;
}
/**
* 获取jvm 和java 的信息
*
* @return
*/
public static Map<String, Object> getJvmInfo() {
Map<String, Object> jvmInfo = Maps.newHashMap();
Runtime runtime = Runtime.getRuntime();
RuntimeMXBean runtimeMXBean = ManagementFactory.getRuntimeMXBean();
// JVM信息
long jvmMemTotal = runtime.totalMemory();
long jvmMemFree = runtime.freeMemory();
//JVM可以使用的总内存
jvmInfo.put("jvmMemTotal", byteToM(jvmMemTotal));
//JVM可以使用的剩余内存
jvmInfo.put("jvmMemFree", byteToM(jvmMemFree));
// JVM 使用内存
jvmInfo.put("jvmMemUsed", byteToM(jvmMemTotal - jvmMemFree));
// JVM内存使用率
jvmInfo.put("jvmMemUsedPercent", NumberUtil.formatPercent(((double) jvmMemFree) / jvmMemTotal, 2));
//JVM最大可使用内存
jvmInfo.put("jvmMemMax", byteToM(runtime.maxMemory()));
//JVM可以使用的处理器个数
jvmInfo.put("jvmAvailableProcessors", runtime.availableProcessors());
//程序启动时间
jvmInfo.put("jvmStartTime", new Date(runtimeMXBean.getStartTime()));
//程序运行时间
jvmInfo.put("jvmRunTime", runtimeMXBean.getUptime());
// 启动输入参数
jvmInfo.put("jvmArgs", runtimeMXBean.getInputArguments());
//线程总数
jvmInfo.put("threadCount", ManagementFactory.getThreadMXBean().getThreadCount());
Properties props = System.getProperties();
// JAVA信息
//Java的运行环境版本
jvmInfo.put("javaName", props.getProperty("java.vm.name"));
//Java的运行环境版本
jvmInfo.put("javaVersion", props.getProperty("java.version"));
//Java的运行环境供应商
jvmInfo.put("javaVendor", props.getProperty("java.vendor"));
//Java的安装路径
jvmInfo.put("javaHome", props.getProperty("java.home"));
//用户的账户名称
jvmInfo.put("userName", props.getProperty("user.name"));
//用户的主目录
jvmInfo.put("userHome", props.getProperty("user.home"));
//用户的当前工作目录
jvmInfo.put("userDir", props.getProperty("user.dir"));
return jvmInfo;
}
/**
* 计算机, 操作系统, 网络信息
*
* @return
*/
public static Map<String, Object> getComputerInfo() {
Properties props = System.getProperties();
List<String> ips = Lists.newArrayList();
try {
// 遍历所有的网络接口
for (Enumeration ifaces = NetworkInterface.getNetworkInterfaces(); ifaces.hasMoreElements(); ) {
NetworkInterface iface = (NetworkInterface) ifaces.nextElement();
// 在所有的接口下再遍历IP
for (Enumeration inetAddrs = iface.getInetAddresses(); inetAddrs.hasMoreElements(); ) {
InetAddress inetAddr = (InetAddress) inetAddrs.nextElement();
String ip = inetAddr.getHostAddress();
if (StrUtil.containsAny(ip, ".")) {
ips.add(ip);
}
}
}
} catch (SocketException e) {
logger.error("获取网络信息失败");
e.printStackTrace();
}
Map<String, String> map = System.getenv();
// 获取用户名
String username = map.get("USERNAME");
// 获取计算机名
String computerName = map.get("COMPUTERNAME");
// 获取计算机域名
String userDomain = map.get("USERDOMAIN");
Map<String, Object> properties = Maps.newHashMap();
// 用户名
properties.put("username", username);
// 计算机名
properties.put("computerName", computerName);
// 计算机域名
properties.put("userDomain", userDomain);
// IP网络信息
properties.put("ips", ips);
// 操作系统信息
//操作系统的名称
properties.put("osName", props.getProperty("os.name"));
//操作系统的构架
properties.put("osArch", props.getProperty("os.arch"));
//操作系统的版本
properties.put("osVersion", props.getProperty("os.version"));
//文件分隔符
properties.put("fileSeparator", props.getProperty("file.separator"));
//路径分隔符
properties.put("pathSeparator", props.getProperty("path.separator"));
//行分隔符
properties.put("lineSeparator", props.getProperty("line.separator"));
return properties;
}
/**
* 获取cpu信息
*
* @return
*/
public static Map<String, Object> getCpuInfo() {
Map<String, Object> cpuInfo = Maps.newHashMap();
try {
Sigar sigar = getInstance();
CpuPerc cpuPerc = sigar.getCpuPerc();
CpuInfo[] cpuInfoList = sigar.getCpuInfoList();
CpuInfo oneCpu = cpuInfoList[0];
// cpu个数
cpuInfo.put("cpuNum", cpuInfoList.length);
// cpu型号
cpuInfo.put("model", oneCpu.getModel());
// cpu提供商
cpuInfo.put("vendor", oneCpu.getVendor());
// cpu频率
cpuInfo.put("maxMhz", NumberUtil.decimalFormat("#.##", (oneCpu.getMhz() / 1024D)) + "GHz");
// 缓存存储器大小
cpuInfo.put("cacheSize", oneCpu.getCacheSize());
// 空闲率
cpuInfo.put("idle", CpuPerc.format(cpuPerc.getIdle()));
// 错误率
cpuInfo.put("nice", CpuPerc.format(cpuPerc.getNice()));
// 系统使用率
cpuInfo.put("sys", CpuPerc.format(cpuPerc.getSys()));
// 用户使用率
cpuInfo.put("user", CpuPerc.format(cpuPerc.getUser()));
// 等待率
cpuInfo.put("wait", CpuPerc.format(cpuPerc.getWait()));
没有合适的资源?快使用搜索试试~ 我知道了~
SpringBoot结合Sigar获取服务器监控信息源代码
共32个文件
so:15个
java:5个
dylib:2个
需积分: 44 42 下载量 38 浏览量
2019-09-21
18:09:28
上传
评论 1
收藏 2.6MB ZIP 举报
温馨提示
SpringBoot结合Sigar获取服务器监控信息提供restful接口的源代码, 并使用swagger生成接口文档, 包括 CPU信息,服务器基本信息,内存信息, JVM信息,磁盘信息等. 有详细的代码注释.
资源推荐
资源详情
资源评论
收起资源包目录
server-info.zip (32个子文件)
pom.xml 2KB
src
main
resources
application.properties 93B
sigar
log4j.jar 342KB
.sigar_shellrc 2KB
libsigar-x86-freebsd-5.so 176KB
libsigar-ppc-linux.so 252KB
libsigar-x86-solaris.so 237KB
libsigar-s390x-linux.so 264KB
libsigar-amd64-freebsd-6.so 206KB
libsigar-ia64-hpux-11.sl 564KB
libsigar-ppc64-aix-5.so 415KB
libsigar-ppc64-linux.so 323KB
libsigar-universal64-macosx.dylib 388KB
libsigar-x86-linux.so 228KB
libsigar-amd64-solaris.so 245KB
sigar-x86-winnt.dll 260KB
sigar.jar 419KB
libsigar-pa-hpux-11.sl 504KB
libsigar-universal-macosx.dylib 369KB
libsigar-sparc64-solaris.so 256KB
libsigar-ppc-aix-5.so 392KB
sigar-amd64-winnt.dll 393KB
libsigar-sparc-solaris.so 278KB
libsigar-amd64-linux.so 241KB
sigar-x86-winnt.lib 97KB
libsigar-ia64-linux.so 483KB
libsigar-x86-freebsd-6.so 175KB
java
cc
nonone
serverinfo
config
SwaggerConfig.java 1KB
ServerInfoApplication.java 362B
common
utils
OsCheck.java 1KB
SigarUtil.java 12KB
controller
ServerInfoController.java 3KB
共 32 条
- 1
资源评论
inonone
- 粉丝: 10
- 资源: 4
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功