不管是业务功能需要还是开发诊断需要,经常需要用到CPU内存硬盘等信息,或者需要主板编号和系统编号做唯一设备标识。于是设计了机器信息类 MachineInfo ,支持Windows、Linux、Raspberry等。
Nuget包:NewLife.Core
源码地址:https://github.com/NewLifeX/X/blob/master/NewLife.Core/Common/MachineInfo.cs
快速入门
星尘代理StarAgent支持查看机器信息。
此处为语雀文档,点击链接查看:https://www.yuque.com/go/doc/16206433
Win10台式机的机器信息:
嵌入式工业计算机的机器信息(带有温度值):
树莓派Zero的机器信息(60~100块钱,跑Mono):
阿里云服务器的机器信息:
星尘上查看A5工业计算机的信息(http://star.newlifex.com/Nodes/NodeData?nodeId=59):
基础信息
OSName,系统名称,例如显示“Windows 10 企业版”,而不是“Microsoft Windows NT 10.0.19042.0”
OSVersion,系统版本。
Product,产品名称,制造商,例如“Alibaba Cloud ECS”
Processor,处理器型号
设备标识
CpuID,处理器序列号,曾经唯一,某一年之后,这个序列号就变成了类似批次号一样,大量重复
UUID,硬件唯一标识,主板编号。小牌子主板该号码大量重复
Guid,操作系统标识,重装系统后改变。Ghost系统大量重复
DiskID,磁盘序列号,遇到虚拟盘容易改变,例如云服务器或者树莓派TF卡。在本地客户端中该号码唯一性很好。
在实际应用中,星尘就采用UUID+Guid+DiskID混合后计算Crc的方式,来作为客户端唯一标识。
某些系统中,可能无法读取到这些标识,特别是不同的Linux发行版。此时MachineInfo会生成随机guid,并以0-开头。
状态信息
Memory,内存总量
AvailableMemory,可用内存
CpuRate,CPU使用率,Windows和Linux介采用系统空闲时间和总处理器时间比值来计算
Temperature,温度,主要用于Raspberry等嵌入式板卡中
缓存与刷新
机器硬件信息一般很少改变,为了加速系统启动速度,可以提前调用 MachineInfo.RegisterAsync() 来优化。
该方法内部会异步读取机器硬件信息,并生成machine_info.json文件,缓存到本地Data数据目录和系统Temp临时目录。本地Data数据目录是为了方便下次启动加速,而系统Temp临时目录则是为其它应用而优化缓存。
同时,某些信息需要系统管理员权限才能获取,而并非所有应用都有该权限,同一台服务器上,只要有一个应用具备管理员权限,其它所有应用也可得到准确的硬件信息。
再者,对于读取不到或者不存在的硬件,例如主板UUID,会自动生成一个随机guid,放置在系统Temp目录,可以避免同一台服务器上的不同应用生成不同的UUID。
为了读取得到最新状态信息,读取之前需要调用 Refresh 方法来刷新。