简介

CZGL.SystemInfo 是一个支持 Windows 和 Linux 的资源信息获取库,用于获取系统环境、机器资源信息、系统资源使用情况。

Nuget 搜索 CZGL.SystemInfo 即可安装。

类库中每一个属性和方法,我都加上了注释,调用时可以看得到。

平台通用

CZGL.SystemInfo 命名空间下,有个 EnvironmentInfo 静态类,用于获取各种信息。

CZGL.SystemInfo.Info 命名空间中,有三个类型,用于获取和记录不同类型的信息。

MachineRunInfo 用来获取机器运行使用的资源信息;

SystemPlatformInfo 用来获取系统平台信息;

SystemRunEvnInfo 获取系统属性信息;

EnvironmentInfo.GetEnvironmentVariables() 用于获取系统所有的环境变量。

获取某个属性信息

你可以这样使用

            // new实例获取
MachineRunInfo m = new MachineRunInfo();
Console.WriteLine("当前进程已用内存" + m.ThisUsedMem);

上面三个类型中,都有一个静态实例,也可以这样使用

            Console.WriteLine("当前进程已用内存" + MachineRunInfo.Instance.ThisUsedMem);

MachineRunInfoSystemPlatformInfoSystemRunEvnInfo 三个类型,直接使用属性即可输出信息。

获取所有属性信息

如果你想一次性输出到控制台或者做一个统计,可以使用 EnvironmentInfo 中的方法来快速生成信息。

如果当前系统是中文,会输出中文备注。

            // 注意,一些资源的单位都是 kb

            // 获取系统平台信息
KeyValuePair<string, object>[] a = env.GetSystemPlatformInfoValue();
// 获取系统运行属性信息
KeyValuePair<string, object>[] b = env.GetSystemRunInfoValue();
// 获取机器资源信息
KeyValuePair<string, object>[] c = env.GetMachineInfoValue();
// 获取系统所有环境变量
KeyValuePair<string, object>[] d = env.GetEnvironmentVariables();

打印示例

            Console.WriteLine("\n系统平台信息:\n");
foreach (var item in a)
{
Console.WriteLine($"{item.Key} : {item.Value}");
} Console.WriteLine("\n\n系统运行属性信息:\n");
foreach (var item in b)
{
Console.WriteLine($"{item.Key} : {item.Value}");
} Console.WriteLine("\n\n机器资源信息:\n");
foreach (var item in c)
{
Console.WriteLine($"{item.Key} : {item.Value}");
} Console.WriteLine("\n\n系统所有环境变量:\n");
foreach (var item in d)
{
Console.WriteLine($"{item.Key} : {item.Value}");
}

输出(部分显示)

系统平台信息:

运行框架    :    .NET Core 3.1.0
操作系统 : Microsoft Windows 10.0.17763
操作系统版本 : Microsoft Windows NT 6.2.9200.0
平台架构 : X64 系统运行属性信息: 机器名称 : aaaa-PC
当前关联用户名 : aaa
用户网络域名 : aaa-PC
系统已运行时间(毫秒) : 3227500
Web程序核心框架版本 : 3.1.0
是否在交互模式中运行 : True
分区磁盘 : D:\, E:\, F:\, G:\, H:\, X:\
系统目录 : X:\windows\system32 机器资源信息: 当前进程已使用物理内存 : 20020
当前进程已占耗CPU时间 : 328.125
系统所有进程各种使用的内存 : System.Collections.Generic.KeyValuePair`2[System.String,System.Int64][]
系统已使用内存 : 5988340 系统所有环境变量: VisualStudioVersion : 16.0
CommonProgramFiles(x86) : x:\Program Files (x86)\Common Files

还可以使用 (string, KeyValuePair<string, object>[]) GetMachineInfo() 等,string 返回此类型信息的说明。

Linux

Nuget 搜索 CZGL.SystemInfo.Linux 安装。

在这个库中,Linux 资源信息包括 进程计量,内存计量,CPU计量,虚拟内存计量,各种进程运行信息计量。

要通过实例化 DynamicInfo 才能获取。

有 5 个对象用于映射相应信息。

Tasks:用于统计进程数量,处于不同状态下的进程数。

CpuState:CPU 使用情况,CPU 各种负载信息。

Mem:物理内存和缓存使用情况。

Swap:虚拟内存使用情况。

PidInfo:一个进程的运行资源信息。

他们都有一个 IsSuccess 属性,用来判断是否能正常获取到 Linux 的信息。

实例化获取对象

            DynamicInfo info = new DynamicInfo();

直接使用

可以通过方法获取到相应的对象。

            var item = info.GetTasks();
Console.WriteLine("系统中共有进程数 :" + item.Total);
Console.WriteLine("正在运行的进程数 :" + item.Running);

批量获取

以下是批量获取的示例,每个属性和属性值生成一个键值对,可以批量获取信息列表。

如果当前系统是中文,会输出中文备注。

            // 获取进程统计
KeyValuePair<string, object>[] a = info.GetRefTasks(); // 获取CPU资源统计
KeyValuePair<string, object>[] b = info.GetRefCpuState(); // 获取内存统计
KeyValuePair<string, object>[] c = info.GetRefMem(); // 获取虚拟内存统计
KeyValuePair<string, object>[] d = info.GetRefSwap(); Dictionary<int, PidInfo> dic = info.GetPidInfo(); Console.WriteLine("\n进程统计:\n");
foreach (var item in a)
{
Console.WriteLine($"{item.Key} : {item.Value}");
} Console.WriteLine("\n\nCPU资源统计:\n");
foreach (var item in b)
{
Console.WriteLine($"{item.Key} : {item.Value}");
} Console.WriteLine("\n\n内存统计:\n");
foreach (var item in c)
{
Console.WriteLine($"{item.Key} : {item.Value}");
} Console.WriteLine("\n\n获取虚拟内存统计:\n");
foreach (var item in d)
{
Console.WriteLine($"{item.Key} : {item.Value}");
} Console.WriteLine("\n\n 各个进程使用的资源:\n");
Console.WriteLine(" 进程Id 进程名称 所属用户 优化级 高低优先级 虚拟内存 物理内存 共享内存 进程状态 占用系统CPU(%) 占用内存(%d) "); foreach (var item in dic)
{
Console.WriteLine($"{item.Key} {item.Value.Command} {item.Value.User} {item.Value.PR} " +
$"{item.Value.Nice} {item.Value.VIRT} {item.Value.RES} {item.Value.SHR} " +
$"{item.Value.State} {item.Value.CPU} {item.Value.Mem}");
}
}

输出

进程统计:

Total    :    93
Running : 1
Sleeping : 59
Stopped : 0
Zombie : 0 CPU资源统计: UserSpace : 1
Sysctl : 0.6
NI : 0
Idolt : 98.3
WaitIO : 0.1
HardwareIRQ : 0
SoftwareInterrupts : 0 内存统计: Total : 1009048
Used : 334040
Free : 85408
Buffers : 589600
CanUsed : 675008 获取虚拟内存统计: Total : 0
Used : 0
Free : 0
AvailMem : 505744

Windows 暂时不写了。剪头发去了。

.NET Core 获取主机运行资源的库的更多相关文章

  1. .NET Core 获取程序运行环境信息与反射的应用

    目录 RuntimeInformation.Environment 获取信息 反射获取信息 获取某个属性的值以及别名 反射获取信息 使用 总结 笔者的九篇反射系统文章已经完结,但是笔者会持续更新反射在 ...

  2. .NET Core 跨平台资源监控库及 dotnet tool 小工具

    目录 简介 dotnet tool 体验 CZGL.SystemInfo SystemPlatformInfo ProcessInfo 内存监控 NetworkInfo DiskInfo 简介 CZG ...

  3. ASP.NET Core中的运行状况检查

    由卢克·莱瑟姆和格伦Condron ASP.NET Core提供了运行状况检查中间件和库,用于报告应用程序基础结构组件的运行状况. 运行状况检查由应用程序公开为HTTP终结点.可以为各种实时监视方案配 ...

  4. saltstack主机管理项目:编写插件基类-获取主机列表-提取yaml配置文件(四)

    一.编写插件基类 1.目录结构 1.我是如何获知我有多少种系统? 当客户端第一连接过来的时候,我就已经把这些文件存下来了 ,存在到哪里了?存到数据库了 每次对主机发送命令的动作时,我从库里把数据取出来 ...

  5. (15)ASP.NET Core Web主机(IWebHostBuilder)

    1.前言 ASP.NET Core应用程序可以配置和启动主机(Host).主机负责应用程序启动和生存期管理,配置服务器和请求处理管道.主机还可以设置日志记录.依赖关系注入和配置.而host主机又包括W ...

  6. (16)ASP.NET Core 通用主机(HostBuilder)

    1.前言 ASP.NET Core应用程序可以配置和启动主机(Host).主机负责应用程序启动和生命周期管理.通用主机用于无法处理HTTP请求的应用程序.通用主机的用途是将HTTP管道从Web主机AP ...

  7. dotnet core 获取 MacAddress 地址方法

    本文告诉大家如何在 dotnet core 获取 Mac 地址 因为在 dotnetcore 是没有直接和硬件相关的,所以无法通过 WMI 的方法获取当前设备的 Mac 地址 但是在 dotnet c ...

  8. 使用 C# 开发 Kubernetes 组件,获取集群资源信息

    写什么呢 前段时间使用 C# 写了个项目,使用 Kubernetes API Server,获取信息以及监控 Kubernetes 资源,然后结合 Neting 做 API 网关. 体验地址 http ...

  9. linux中uptime命令获取主机运行时间和查询系统负载信息

    系统中的uptime命令主要用于获取主机运行时间和查询linux系统负载等信息.uptime命令可以显示系统已经运行了多长时间,信息显示依次为:现在时间.系统已经运行了多长时间.目前有多少登陆用户.系 ...

随机推荐

  1. 系统学习javaweb4----CSS层叠样式表(结束)

    摘要:这几天临近过年,事情有点多,学习总是段段续续的,今天总算完成了CSS的基本知识学习. 学习笔记: 西瓜学习javaweb 1.css简述. 1.1 css是什么?有什么作用? HTML----- ...

  2. 让Spring不再难懂-aop篇

    什么是aop AOP(Aspect-OrientedProgramming,面向方面编程),可以说是OOP(Object-Oriented Programing,面向对象编程)的补充和完善.OOP允许 ...

  3. 3.redis kyes命令

    Keys命令 1.1设置key的生存时间 Redis在实际使用过程中更多的用作缓存,然而缓存的数据一般都是需要设置生存时间的,即:到期后数据销毁. EXPIRE key seconds         ...

  4. MOOC(14)- 从数据库中获取预期结果

    数据库中的预期结果写的是SQL语句 从表格中读取到SQL语句,再去数据库获取真正的预期结果 # -*- coding: utf-8 -*- # @Time : 2020/2/18 9:50 # @Fi ...

  5. 吴裕雄--天生自然 JAVASCRIPT开发学习:对象 实例(3)

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  6. testNG报告优化,testNG-xslt

    一.在使用testNG自动化框架执行测试用例后,会自动生成HTML的测试报告,但是过于简单,信息展示极少,也没有图表说明,所有我们使用testNG-xslt进行美化. 二.具体实现步骤: 1.在网站下 ...

  7. leaflet加载各种地图

    Leaflet调用各种地图的功能十分复杂,幸好有leaflet.ChineseTmsProviders这个插件,这四种地图直接就可以加载进来,十分方便. 下面是我做的例子: <!DOCTYPE ...

  8. Java IO: 其他字符流(下)

    作者: Jakob Jenkov 译者: 李璟(jlee381344197@gmail.com) 本小节会简要概括Java IO中的PushbackReader,LineNumberReader,St ...

  9. OpenCV Canny 边缘检测

    #include "opencv2/imgproc/imgproc.hpp" #include "opencv2/highgui/highgui.hpp" #i ...

  10. freeRadius日志关闭

    vim /etc/raddb/radiusd.conf #file = ${logdir}/radius.log file = /dev/null vim /etc/raddb/modules/det ...