IIS:从 web api 应用程序获取系统 CPU 使用率

问题描述

我必须创建一个小服务,以显示机器的健康状态(Windwos 服务)。

我创建了一个非常小而简单的 aspnet 应用程序,它返回这些数据。 当我从命令行运行应用程序时它工作正常(使用 dotnet 命令),但是当我将它作为 IIS 站点运行时,cpu 方法不返回任何值。

感谢您的帮助,抱歉我的英语不好。

这是代码

[ApiController]
[Route("[controller]")]
[Route("/")]
public sealed class SystemHealthController : ControllerBase
{
    [HttpGet("cpu")]
    public async Task<ActionResult<string>> Getcpu()
            => await WmicmetricsClient.cpu().ConfigureAwait(false);

    [HttpGet("memory")]
    public async Task<ActionResult<string>> GetMemory()
                => await WmicmetricsClient.Memory();
}

public static class WmicmetricsClient
{
    public static async Task<string> Memory()
    {
        var output = await GetCommandLineOutputAsync(
            fileName: "wmic",arguments: "OS get FreePhysicalMemory,TotalVisibleMemorySize /Value");

        return output;
    }

    public static async Task<string> cpu()
    {
        var output = await GetCommandLineOutputAsync(
            fileName: "wmic",arguments: "cpu get loadpercentage /Value");

        return output;
    }

    private static async Task<string> GetCommandLineOutputAsync(string fileName,string arguments)
    {
        var info = new processstartinfo
        {
            FileName = fileName,Arguments = arguments,RedirectStandardOutput = true
        };

        using var process = Process.Start(info);
        return await process.StandardOutput.ReadToEndAsync();
    }
}

解决方法

好的,我有解决方案:

在计算机管理>系统工具>本地用户和组>组中。

然后,我点击“Perfomance Monitor Users”组,并添加 IIS Apppool\MYAPPPOOL