<dependency>
<groupId>com.github.oshi</groupId>
<artifactId>oshi-core</artifactId>
<version>6.2.2</version>
</dependency>
import oshi.SystemInfo;
import oshi.hardware.CentralProcessor;
import oshi.hardware.ComputerSystem;
import oshi.hardware.GlobalMemory;
import oshi.hardware.HardwareAbstractionLayer;
import oshi.software.os.OSProcess;
import oshi.software.os.OperatingSystem;
import oshi.util.Util;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.*;
/**
* @author zhong
*/
public class SysInfoUtils {
/**
* 信息类
*/
private static final SystemInfo systemInfo = new SystemInfo();
/**
* 硬件信息类
*/
private static final HardwareAbstractionLayer hardware = systemInfo.getHardware();
/**
* 操作系统信息类
*/
private static final OperatingSystem operatingSystem = systemInfo.getOperatingSystem();
/**
* 获取系统信息
*
* @return 品牌 制造商 系统名称 版本 提供商
*/
public static Map<String, Object> getSysInfo() {
Map<String, Object> info = new HashMap<>();
ComputerSystem computerSystem = hardware.getComputerSystem();
// 获取电脑品牌
info.put("pcModel:", computerSystem.getModel());
// 电脑制造商
info.put("pcManufacturer", computerSystem.getManufacturer());
// 系统名称
System.out.println("osName" + operatingSystem.getFamily());
// 系统版本
System.out.println("osVersion" + operatingSystem.getVersionInfo());
// 系统供应商
System.out.println("osSupplier" + operatingSystem.getManufacturer());
return info;
}
/**
* 获取Cpu的运行情况
*
* @return
*/
public static Map<String, Object> getCpuIngInfo() {
Map<String, Object> cpuInfo = new HashMap<>();
CentralProcessor processor = hardware.getProcessor();
// CPU信息
long[] prevTicks = processor.getSystemCpuLoadTicks();
//休眠1秒
Util.sleep(1000);
long[] ticks = processor.getSystemCpuLoadTicks();
long nice = ticks[CentralProcessor.TickType.NICE.getIndex()] - prevTicks[CentralProcessor.TickType.NICE.getIndex()];
long irq = ticks[CentralProcessor.TickType.IRQ.getIndex()] - prevTicks[CentralProcessor.TickType.IRQ.getIndex()];
long softirq = ticks[CentralProcessor.TickType.SOFTIRQ.getIndex()] - prevTicks[CentralProcessor.TickType.SOFTIRQ.getIndex()];
long steal = ticks[CentralProcessor.TickType.STEAL.getIndex()] - prevTicks[CentralProcessor.TickType.STEAL.getIndex()];
long cSys = ticks[CentralProcessor.TickType.SYSTEM.getIndex()] - prevTicks[CentralProcessor.TickType.SYSTEM.getIndex()];
long user = ticks[CentralProcessor.TickType.USER.getIndex()] - prevTicks[CentralProcessor.TickType.USER.getIndex()];
long iowait = ticks[CentralProcessor.TickType.IOWAIT.getIndex()] - prevTicks[CentralProcessor.TickType.IOWAIT.getIndex()];
long idle = ticks[CentralProcessor.TickType.IDLE.getIndex()] - prevTicks[CentralProcessor.TickType.IDLE.getIndex()];
long totalCpu = user + nice + cSys + idle + iowait + irq + softirq + steal;
cpuInfo.put("total", totalCpu);
//cpu系统使用率
cpuInfo.put("cSys", new DecimalFormat("#.##%").format(cSys * 1.0 / totalCpu));
//cpu用户使用率
cpuInfo.put("user", new DecimalFormat("#.##%").format(user * 1.0 / totalCpu));
//cpu当前等待率
cpuInfo.put("iowait", new DecimalFormat("#.##%").format(iowait * 1.0 / totalCpu));
//cpu当前使用率
cpuInfo.put("used", idle);
//空闲
cpuInfo.put("free", totalCpu - idle);
//百分百
cpuInfo.put("idle", new DecimalFormat("#.##%").format(1.0 - (idle * 1.0 / totalCpu)));
return cpuInfo;
}
/**
* 获取系统信息内存
*
* @return
*/
public static Map<String, Object> getRamInfo() {
Map<String, Object> ram = new HashMap();
GlobalMemory memory = systemInfo.getHardware().getMemory();
//总内存
long totalByte = memory.getTotal();
//剩余
long availableByte = memory.getAvailable();
//总内存
ram.put("total", totalByte);
ram.put("totalStr", formatByte(totalByte));
//使用
ram.put("used", (totalByte - availableByte));
ram.put("usedStr", formatByte(totalByte - availableByte));
//剩余内存
ram.put("free", availableByte);
ram.put("freeStr", formatByte(availableByte));
//使用率
ram.put("usageRate", new DecimalFormat("#.##").format((totalByte - availableByte) * 1.0 / totalByte));
ram.put("usageRateStr", new DecimalFormat("#.##%").format((totalByte - availableByte) * 1.0 / totalByte));
return ram;
}
/**
* 系统jvm信息
*/
public static Map<String, Object> getJvmInfo() {
Map<String, Object> cpuInfo = new HashMap<>();
Properties props = System.getProperties();
Runtime runtime = Runtime.getRuntime();
long jvmTotalMemoryByte = runtime.totalMemory();
long freeMemoryByte = runtime.freeMemory();
//jvm总内存
cpuInfo.put("total", formatByte(runtime.totalMemory()));
//空闲空间
cpuInfo.put("free", formatByte(runtime.freeMemory()));
//jvm最大可申请
cpuInfo.put("max", formatByte(runtime.maxMemory()));
//vm已使用内存
cpuInfo.put("user", formatByte(jvmTotalMemoryByte - freeMemoryByte));
//jvm内存使用率
cpuInfo.put("usageRate", new DecimalFormat("#.##%").format((jvmTotalMemoryByte - freeMemoryByte) * 1.0 / jvmTotalMemoryByte));
//jdk版本
cpuInfo.put("jdkVersion", ((Properties) props).getProperty("java.version"));
//jdk路径
cpuInfo.put("jdkHome", props.getProperty("java.home"));
return cpuInfo;
}
/**
* 获取系统所有进程
*
* @return
*/
public static List<Map<String, Object>> getOSProcess() {
List<Map<String, Object>> infoList = new ArrayList<>();
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
List<OSProcess> lists = operatingSystem.getProcesses();
for (OSProcess process : lists) {
Map<String, Object> info = new HashMap<>();
// 进程更新时间
info.put("updateTime", format.format(new Date(process.getStartTime() + process.getUpTime())));
// 进程名称
info.put("name", process.getName());
// 进程用户
info.put("user", process.getUser());
// 进程ID
info.put("id", process.getProcessID());
// 文件地址
info.put("path", process.getPath());
// 位数
info.put("bitness", process.getBitness());
// 启动时间
info.put("startTime", format.format(new Date(process.getStartTime())));
infoList.add(info);
}
return infoList;
}
/**
* 获取CPU信息
*
* @return
*/
public static Map<String, Object> getCpuInfo() {
Map<String, Object> info = new HashMap<>();
CentralProcessor centralProcessor = hardware.getProcessor();
// 逻辑处理器数量
info.put("cpuLogicCount", centralProcessor.getLogicalProcessorCount());
// 物理处理器数量
info.put("cpuPhysicalCount", centralProcessor.getPhysicalProcessorCount());
CentralProcessor.ProcessorIdentifier processor = centralProcessor.getProcessorIdentifier();
// 获取CPU名称
info.put("cpuName", processor.getName());
// 获取CPU型号
info.put("cpuModel", processor.getModel());
// 获取家族
info.put("cpuFamily", processor.getFamily());
// 频率
info.put("cpuFreq", processor.getVendorFreq());
// 供货商
info.put("cpuVendor", processor.getVendor());
// 微架构
info.put("cpuMicroarchitecture", processor.getMicroarchitecture());
info.put("cpuId", processor.getProcessorID());
// 步进
info.put("cpuStepping", processor.getStepping());
// 是否64位
info.put("isCpu64bit", processor.isCpu64bit());
return info;
}
/**
* 格式化转换
*
* @param byteNumber 传入byte
* @return 格式化结果
*/
private static String formatByte(long byteNumber) {
//换算单位
double FORMAT = 1024.0;
double kbNumber = byteNumber / FORMAT;
if (kbNumber < FORMAT) {
return new DecimalFormat("#.##KB").format(kbNumber);
}
double mbNumber = kbNumber / FORMAT;
if (mbNumber < FORMAT) {
return new DecimalFormat("#.##MB").format(mbNumber);
}
double gbNumber = mbNumber / FORMAT;
if (gbNumber < FORMAT) {
return new DecimalFormat("#.##GB").format(gbNumber);
}
double tbNumber = gbNumber / FORMAT;
return new DecimalFormat("#.##TB").format(tbNumber);
}
public static void main(String[] args) throws InterruptedException {
System.out.println(getCpuInfo());
}
}
文章浏览阅读2w次,点赞7次,收藏51次。四个步骤1.创建C++ Win32项目动态库dll 2.在Win32项目动态库中添加 外部依赖项 lib头文件和lib库3.导出C接口4.c#调用c++动态库开始你的表演...①创建一个空白的解决方案,在解决方案中添加 Visual C++ , Win32 项目空白解决方案的创建:添加Visual C++ , Win32 项目这......_c#调用lib
文章浏览阅读4.6k次。苹方字体是苹果系统上的黑体,挺好看的。注重颜值的网站都会使用,例如知乎:font-family: -apple-system, BlinkMacSystemFont, Helvetica Neue, PingFang SC, Microsoft YaHei, Source Han Sans SC, Noto Sans CJK SC, W..._ubuntu pingfang
文章浏览阅读159次。表单表单概述表单标签表单域按钮控件demo表单标签表单标签基本语法结构<form action="处理数据程序的url地址“ method=”get|post“ name="表单名称”></form><!--action,当提交表单时,向何处发送表单中的数据,地址可以是相对地址也可以是绝对地址--><!--method将表单中的数据传送给服务器处理,get方式直接显示在url地址中,数据可以被缓存,且长度有限制;而post方式数据隐藏传输,_html表单的处理程序有那些
文章浏览阅读1.2k次。使用说明:开启Google的登陆二步验证(即Google Authenticator服务)后用户登陆时需要输入额外由手机客户端生成的一次性密码。实现Google Authenticator功能需要服务器端和客户端的支持。服务器端负责密钥的生成、验证一次性密码是否正确。客户端记录密钥后生成一次性密码。下载谷歌验证类库文件放到项目合适位置(我这边放在项目Vender下面)https://github.com/PHPGangsta/GoogleAuthenticatorPHP代码示例://引入谷_php otp 验证器
文章浏览阅读4.3k次,点赞5次,收藏11次。matplotlib.plot画图横坐标混乱及间隔处理_matplotlib更改横轴间距
文章浏览阅读2.2k次。①Storage driver 处理各镜像层及容器层的处理细节,实现了多层数据的堆叠,为用户 提供了多层数据合并后的统一视图②所有 Storage driver 都使用可堆叠图像层和写时复制(CoW)策略③docker info 命令可查看当系统上的 storage driver主要用于测试目的,不建议用于生成环境。_docker 保存容器
文章浏览阅读834次,点赞27次,收藏13次。网络拓扑结构是指计算机网络中各组件(如计算机、服务器、打印机、路由器、交换机等设备)及其连接线路在物理布局或逻辑构型上的排列形式。这种布局不仅描述了设备间的实际物理连接方式,也决定了数据在网络中流动的路径和方式。不同的网络拓扑结构影响着网络的性能、可靠性、可扩展性及管理维护的难易程度。_网络拓扑csdn
文章浏览阅读1.8k次,点赞5次,收藏8次。IOS系统Date的坑要创建一个指定时间的new Date对象时,通常的做法是:new Date("2020-09-21 11:11:00")这行代码在 PC 端和安卓端都是正常的,而在 iOS 端则会提示 Invalid Date 无效日期。在IOS年月日中间的横岗许换成斜杠,也就是new Date("2020/09/21 11:11:00")通常为了兼容IOS的这个坑,需要做一些额外的特殊处理,笔者在开发的时候经常会忘了兼容IOS系统。所以就想试着重写Date函数,一劳永逸,避免每次ne_date.prototype 将所有 ios
文章浏览阅读5.3k次。方法一:用PLSQL Developer工具。 1 在PLSQL Developer的sql window里输入select * from test for update; 2 按F8执行 3 打开锁, 再按一下加号. 鼠标点到第一列的列头,使全列成选中状态,然后粘贴,最后commit提交即可。(前提..._excel导入pl/sql
文章浏览阅读83次。Git常用命令速查手册1、初始化仓库git init2、将文件添加到仓库git add 文件名 # 将工作区的某个文件添加到暂存区 git add -u # 添加所有被tracked文件中被修改或删除的文件信息到暂存区,不处理untracked的文件git add -A # 添加所有被tracked文件中被修改或删除的文件信息到暂存区,包括untracked的文件...
文章浏览阅读202次。分享119个ASP.NET源码总有一个是你想要的_千博二手车源码v2023 build 1120
文章浏览阅读1.8k次。版权声明:转载请注明出处 http://blog.csdn.net/irean_lau。目录(?)[+]1、缺省构造函数。2、缺省拷贝构造函数。3、 缺省析构函数。4、缺省赋值运算符。5、缺省取址运算符。6、 缺省取址运算符 const。[cpp] view plain copy_空类默认产生哪些类成员函数