不管是业务功能需要还是开发诊断需要,经常需要用到CPU内存硬盘等信息,或者需要主板编号和系统编号做唯一设备标识。于是设计了机器信息类 MachineInfo ,支持Windows、Linux、Raspberry等。

Nuget包:NewLife.Core

源码地址:https://github.com/NewLifeX/X/blob/master/NewLife.Core/Common/MachineInfo.cs


最佳实践

获取本机机器信息,从nuget应用 NewLife.Core 包

var info = MachineInfo.GetCurrent();
XTrace.WriteLine(info.ToJson(true));


快速入门

星尘代理StarAgent支持查看机器信息。

此处为内容卡片,点击链接查看:https://newlifex.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等嵌入式板卡中
  • Battery,电池剩余
  • UplinkSpeed,网络上行速度。字节每秒,初始化后首次读取为0
  • DownlinkSpeed,网络下行速度。字节每秒,初始化后首次读取为0


缓存与刷新

机器硬件信息一般很少改变,为了加速系统启动速度,可以提前调用 MachineInfo.RegisterAsync() 来优化。

该方法内部会异步读取机器硬件信息,并生成machine_info.json文件,缓存到本地Data数据目录和系统Temp临时目录。本地Data数据目录是为了方便下次启动加速,而系统Temp临时目录则是为其它应用而优化缓存。


同时,某些信息需要系统管理员权限才能获取,而并非所有应用都有该权限,同一台服务器上,只要有一个应用具备管理员权限,其它所有应用也可得到准确的硬件信息。


再者,对于读取不到或者不存在的硬件,例如主板UUID,会自动生成一个随机guid,放置在系统Temp目录,可以避免同一台服务器上的不同应用生成不同的UUID。


为了读取得到最新状态信息,读取之前需要调用 Refresh 方法来刷新。


作者:大石头 发布:2022-04-22 10:18:23 浏览:2,800)