这篇文章我们分享一种如何在
.NETCore
中获取 CPU使用率的方法, 它所报告的这个值和
任务管理器
中报告的 CPU 使用值 差不多是一致的。
在
.NET Framework
中,很多人会用
PerformanceCounter
类做这件事情,参考如下代码:
public class Program
public static void Main(string[] args)
while (true)
var cpuUsage = GetCpuUsageForProcess();
Console.WriteLine(cpuUsage);
private static int GetCpuUsageForProcess()
var currentProcessName = Process.GetCurrentProcess().ProcessName;
var cpuCounter = new PerformanceCounter("Process", "% Processor Time", currentProcessName);
cpuCounter.NextValue();
return (int)cpuCounter.NextValue();
但 PerformanceCounter
在 .NETCore 中是没有的,所以只能采用其他方式了,其实在 System.Diagnostics.Process
类中有一个 TotalProcessorTime
属性,它可以准实时的统计当前进程所消耗的CPU处理器时间,参考如下代码:
class Program
public static async Task Main(string[] args)
var task = Task.Run(() => ConsumeCPU(50));
while (true)
await Task.Delay(2000);
var cpuUsage = await GetCpuUsageForProcess();
Console.WriteLine(cpuUsage);
public static void ConsumeCPU(int percentage)
Stopwatch watch = new Stopwatch();
watch.Start();
while (true)
if (watch.ElapsedMilliseconds > percentage)
Thread.Sleep(100 - percentage);
watch.Reset();
watch.Start();
private static async Task<double> GetCpuUsageForProcess()
var startTime = DateTime.UtcNow;
var startCpuUsage = Process.GetCurrentProcess().TotalProcessorTime;
await Task.Delay(500);
var endTime = DateTime.UtcNow;
var endCpuUsage = Process.GetCurrentProcess().TotalProcessorTime;
var cpuUsedMs = (endCpuUsage - startCpuUsage).TotalMilliseconds;
var totalMsPassed = (endTime - startTime).TotalMilliseconds;
var cpuUsageTotal = cpuUsedMs / (Environment.ProcessorCount * totalMsPassed);
return cpuUsageTotal * 100;
可以看到程序每2s输出一次,观察到 output 和 任务管理器 中的CPU利用率基本是一致的。
译文链接:https://medium.com/@jackwild/getting-cpu-usage-in-net-core-7ef825831b8b
这篇文章我们分享一种如何在 .NETCore 中获取 CPU使用率的方法, 它所报告的这个值和 任务管理器 中报告的 CPU 使用值 差不多是一致的。在 .NET Framework 中,...
分别通过PerformanceCount、ManagementClass、OpenHardwareMonitor、kernel32 来综合获取下面信息:
内存使用率、总CPU百分比、获得物理总内存(、获得可用内存(G)、获取mac地址、获取分区信息使用空间
进程(XX)CPU百分比、进程(XX)占用的内存大小、进程(XX)占用的内存百分比。
PerformanceCount方面比较详细,可以分别获取 计数器的类别、类别下的实例名和计数器名、通过活动的输入获取对应的状态值
代码比较简单直接上了,官网的示例在这个链接里
https://docs.microsoft.com/en-us/windows/win32/cimwin32prov/win32-perfrawdata
using System;
using System.Collections.Generic;
using System.Linq;
using System.Management;
using ...
废话不多说了,网上存在一种获取CPU使用率的方法是有bug的。也不知道有多少使用该方法的人没注意这个问题了,反正我是看到有人直接复制了这个代码。
来看一下 FILETIME的结构:
typedef struct _FILETIME {
DWORD dwLowDateTime;
DWORD dwHighDateTime;
} FILETIME, *PFILETIME,
Prometheus-net.DotNetMetrics
软件包的插件,它公开了.NET核心运行时指标,其中包括:
垃圾回收的收集频率和时间(按生成/类型,暂停时间和GC CPU消耗率)
大小对象堆分配的字节
JIT编译和JIT CPU消耗率
线程池大小,调度延迟以及增长/缩小的原因
抛出异常,按类型细分
这些指标对于理解任何非平凡应用程序的性能至关重要。 即使您的应用程序配置良好,您也只能得到一半的故事-运行时所做的事情可以使情况更完整。
支持.NET core v2.2 +,但建议使用.NET core v3.0 + 。 中可能会影响度量标准收集或运行时稳定性。
公司的产品一直紧跟 .net core 3.0 preview 不断升级, 部署到 Linux 服务器后, 偶尔会出现某个进程CPU占用100%.
由于服务部署在云上, 不能使用远程调试; 在局域网内的Linux 服务器 或 Windows开发机上又不能重现这个问题, 联想到Java的jstack, 很是羡慕啊. 想到.net core 已经出来这么久了, 还是试着找找看吧, 结果还真找到一篇博客Introducing diagnostics improvements in .NET Core 3.0
这篇文章介绍了3个工具
•dotnet-counters: 实时统计runtime的
邮件恶魔&
Mail Demon是一个简单轻巧的C#smtp服务器和邮件列表系统,用于发送无限制的电子邮件和文本消息。 通过专注于简单性,异步性和性能,即使在廉价Linux VPS上,您也可以轻松地每秒发送数千条消息。 内存使用率和CPU使用率已优化到最大。 使用SPF验证还内置了安全性和垃圾邮件防护功能。
Mail Demon需要安装.NET 5.0+运行时,或者您可以构建独立的可执行文件来消除这种依赖性。
尝试使用之前,请确保将appsettings.json设置为所需的参数。
感谢和的强大代码库。
Mail Demon非常适合发送通知,公告甚至短信。 有关的更多信息,请参见。
IPBan集成
Mail Demon与集成在一起。 如果您在Linux或Windows机器上安装了IPBan,则Mail Demon将通过自定义日志文件将SMTP失败的登录尝试或邮件列表登录尝试发送到
.NET Core / .NET Standard中BERT模型预测的示例。
通过运行getDependicies.sh下载预训练的BERT ONNX模型。 或将下载到BERT.WebApi/Model文件夹。
GPU使用率
该项目被设置为在CPU上运行。 这使示例可以在没有Nvidia GPU的机器上运行。
要在Nvidia CUDA GPU上运行:
在OnnxModelConfigurator.cs中设置hasGpu = true
删除NuGet Microsoft.ML.OnnxRuntime.NoOpenMP
添加NuGet Microsoft.ML.OnnxRuntime.Gpu
解决方案运行时,它将在localhost:5001处启动ASP.NET Web服务。
一个插件,用于计算.NET应用程序资源的使用情况,包括:CPU使用率,GC,线程状态,通过Web请求获取状态信息的支持(可以自定义访问路径和身份验证),并且数据将以JSON格式返回。
支持.NET Framework> = 4.5
支持.NET Core> = 2.0
可以通过NuGet网站获得CLRStats,您可以使用以下命令进行安装:
PM> Install-Package CLRStats
仓库的样本文件夹包含ASP.NET MVC和ASP.NET Core的样本。
ASP.NET MVC
该项目需要创建一个新的OWIN启动文件,其配置如下:
public class Startup
public void Configuration ( IAppBuilder app )
app . UseCLRStatsDashboard