【问题标题】:IIS: get system CPU usage from web api applicationIIS:从 Web api 应用程序获取系统 CPU 使用率
【发布时间】:2021-05-20 22:46:43
【问题描述】:

我必须创建一个小服务,以显示机器的健康状态(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();
    }
}

【问题讨论】:

  • blog.lextudio.com/… wmic 之类的命令很可能需要某些权限,而在 IIS 上运行的 Web 应用程序可能无法满足这些要求。
  • @TheobaldDu,非常非常老了,.NET 1,我会试试,但是我需要一个.net core 的解决方案。

标签: iis wmi cpu-usage wmic


【解决方案1】:

好的,我有办法:

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

然后,我点击“性能监视器用户”组,并添加 IIS Apppool\MYAPPPOOL

【讨论】:

    猜你喜欢
    • 2012-01-03
    • 1970-01-01
    • 2011-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多