简介

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. python学习笔记(12)常用模块

    一.模块.包 什么是模块? 模块实质上就是一个python文件,它是用来组织代码的,意思就是说把python代码写到里面,文件名就是模块的名称,test.py test就是模块名称. 什么是包? 包, ...

  2. spring创建bean异常

    org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'requestMappi ...

  3. windows下面apache配置虚拟目录(测试使用,发布网站不建议目录访问)

    windows下面是这样简单设置 1 Apache虚拟目录: 针对某一目录可以这么设置: Alias /aidd2008 "D:/php/web/aidd2008" <Dir ...

  4. ckeditor深入挖掘吃透

  5. [LC] 117. Populating Next Right Pointers in Each Node II

    Given a binary tree struct Node { int val; Node *left; Node *right; Node *next; } Populate each next ...

  6. python-django-redis拒绝连接问题解决_20191121

    今天安装fastdfs的时候,发现最好固定虚拟机的ip, 固定了ip之后,发现使用Windows中的pycharm连接redis的时候,总是拒绝连接,找了很多的办法都不行,有点慌, 但是不能慌,现在要 ...

  7. mysql首次使用过程以及彻底卸载过程

    安装过程: 步骤一: 安装mysql服务,使用命令行: yum install mysql-server 步骤二: 启动mysql服务: service mysqld start 确认msyql是否启 ...

  8. IP地址结构分类(包括主机号和网络好计算)

    IP地址:互联网上的每个接口的唯一标识. 长度:32bit. 五类不同的互联网地址格式: 各类IP地址范围: 点分十进制:32位的地址通常写成四个十进制数,其中每个整数对应一个字节. 主机号和网络的计 ...

  9. Nginx笔记总结十六:nginx优化指南

    1.高层的配置 worker_processes 定义了nginx对外提供web服务时的worker进程数 worker_rlimit_nofile 更改worker进程最大打开文件数量限制,如果没有 ...

  10. mysql5.7解压版安装

    环境:win 10 1.解压 新建my.ini [mysqld] port = 3306 basedir=解压路径 datadir=解压路径\data max_connections=200 char ...