持续监控前 X 个进程的 CPU 使用率

2024-01-21

我希望能够每 5 秒将最高 CPU 消耗者输出到日志文件。这样我就可以在测试期间看到谁使用了最多的 cpu。

我发现这个答案很常见:

$cpu = Get-Counter -ComputerName localhost "\Process(*)\% Processor Time" `
    | Select-Object -ExpandProperty countersamples `
    | where {$_.InstanceName -ne 'idle' } `
    | where {$_.InstanceName -ne '_total' }`
    | Select-Object -Property instancename, cookedvalue `
    | Sort-Object -Property cookedvalue -Descending `
    | Select-Object -First 5 `
    | ft @{L='Date';E={Get-Date}}, InstanceName, @{L='CPU';E={(($_.Cookedvalue/100)/$NumberOfLogicalProcessors).toString('P')}} -HideTableHeaders `
    | Format-Table -Auto | Out-String

我有两个问题:

  1. 有时我会得到:

    Get-Counter:性能计数器示例之一中的数据无效。查看每个 PerformanceCounterSample 对象的 Status 属性以确保它包含有效数据。

  2. 我想获得完整的进程名称,而不是

    
    java      25%
    idea64    0.8%
    ...  

我将尝试使用以下脚本立即回答您的两个问题:

Get-Counter "\Process(*)\% Processor Time" -ErrorAction SilentlyContinue `
  | select -ExpandProperty CounterSamples `
  | where {$_.Status -eq 0 -and $_.instancename -notin "_total", "idle"} `
  | sort CookedValue -Descending `
  | select TimeStamp,
    @{N="Name";E={
        $friendlyName = $_.InstanceName
        try {
            $procId = [System.Diagnostics.Process]::GetProcessesByName($_.InstanceName)[0].Id
            $proc = Get-WmiObject -Query "SELECT ProcessId, ExecutablePath FROM Win32_Process WHERE ProcessId=$procId"
            $procPath = ($proc | where { $_.ExecutablePath } | select -First 1).ExecutablePath
            $friendlyName = [System.Diagnostics.FileVersionInfo]::GetVersionInfo($procPath).FileDescription
        } catch { }
        $friendlyName
    }},
    @{N="CPU";E={($_.CookedValue/100/$env:NUMBER_OF_PROCESSORS).ToString("P")}} -First 5 `
 | ft -a -HideTableHeaders

结果如下表:

24.07.2016 21:00:53 Microsoft Edge Content Process    9,68%
24.07.2016 21:00:53 system                            0,77%
24.07.2016 21:00:53 Microsoft Edge                    0,39%
24.07.2016 21:00:53 runtimebroker                     0,39%
24.07.2016 21:00:53 Host Process for Windows Services 0,39%
  1. 根据指定,您有时会得到:

Get-Counter :性能计数器样本之一中的数据是 无效。查看每个 PerformanceCounterSample 的 Status 属性 对象以确保它包含有效数据。

这和windows环境下的进程管理有关。当您执行查询时,一些进程可能会出现,其中一些可能会消失(即负责执行 wmi 查询的 wmiprvse 进程)。某些进程可能需要您拥有更多权限。这都会导致获取进程信息时出错。可以使用安全地跳过它-ErrorAction SilentlyContinue开关并过滤Status -eq 0表达。

  1. 您还希望看到更友好的进程名称。我不知道是否有比使用可执行文件本身更好的方法来获取该名称GetVersionInfo方法。如果有此类信息FileDescription属性存储该值。如果它不可用,则使用不友好的进程名称。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

持续监控前 X 个进程的 CPU 使用率 的相关文章

随机推荐

  • 查找 pdist 压缩距离矩阵中最小值的索引

    我用过scipy spatial distance pdist X 计算下面列表 X 的每对元素之间的欧氏距离度量 X 0 3 4 2 23 5 32 1 3 4 2 1 33 54 5 12 这将返回一个压缩距离矩阵 array 36 3
  • 现代硬件的算法?

    我再一次发现自己有一套不成立的假设 http queue acm org detail cfm id 1814327 该文章本身介绍了通过修改经过验证的最佳算法来解决虚拟内存问题 从而实现 10 倍的性能提升 在现代多问题 CPU 上 运行
  • 如何将 Bundle Config 添加到 Startup.cs 以便在 Razor 视图中使用资源?

    问题 如何向 Startup cs ASP NET Core 项目 添加与 App Start gt BundleConfig cs 相同的配置 当有 public class BundleConfig For more informati
  • 重新安装纱线时出现问题 - 代码:“MODULE_NOT_FOUND”

    Node js 版本 14 0 0 OS MacOS 10 15 4 范围 安装 代码 运行时 元 其他 纱线安装 模块 和版本 如果相关 内部 模块 cjs loader js 运行任何 Yarn 命令后 我收到以下错误 这是重新安装并执
  • 无法插入到 Supabase 中具有经过身份验证的角色策略的表

    我正在尝试在启用了 RLS 的表中插入一行Enable insert for authenticated users only政策已添加 不幸的是 即使我正确登录 我也无法插入 重现步骤 创建提交表 create table submiss
  • PHP 部分缓存

    我想部分缓存一些 php 文件 例如 所以缓存的页面应该像 缓存 php h1 This section is fixed today h1 div goodbye please visit todays suggested website
  • AppleScript 在 Finder 中设置目录路径

    我正在尝试通过 AppleScript 删除计算机上的文件 当我应用下面的代码时 似乎从桌面上删除了该文件 我想删除 Users andrew Documents 中的文件 下面是从桌面删除文件的代码 tell application Fi
  • 使用 Rspec 存根 File.open

    我正在尝试存根 File open 以测试读取 CSV 文件的方法 这是模型 class BatchTask def import filename CSV read filename row sep gt r col sep gt end
  • 适用于超大时间序列的最佳索引数据结构

    我想询问 SO 们关于用于索引时间序列 又名按列数据 又名平面线性 的最佳数据结构的意见 根据采样 离散化特征 存在两种基本类型的时间序列 常规离散化 每个样本都以共同频率采集 不规则离散化 任意时间点采样 需要的查询 时间范围 t0 t1
  • 泛型方法和方法重载

    方法重载允许我们定义许多具有相同名称但具有不同参数集的方法 因此具有相同的名称但不同的签名 这两个方法是否重载 class A public static void MyMethod
  • 找不到`SQLitePCLRaw.batteries_v2`

    我添加了一个sqlite net pclNuGet 包到 Xamarin iOS 项目 该应用程序以以下异常结束 找不到程序集引用的 SQLitePCLRaw batteries v2 SQLite net 版本 1 1 0 0 文化 中性
  • 从 .html 文件读取其内容的简单 Flask 应用程序。外部样式表被阻止?

    我制作了一个非常简单的 Flask 应用程序 它从 html 文件读取其内容 除了样式之外 该应用程序可以正常工作 奇怪的是 我的内联 CSS 代码可以工作 但外部样式表却不能工作 我已经检查过语法 它应该可以工作 Flask 是否会以某种
  • 如何编写可变参数模板递归函数?

    我正在尝试编写一个可变参数模板constexpr计算给定模板参数总和的函数 这是我的代码 template
  • 快速安全的加密算法 C#

    我正在寻找一种使用 C 实现的快速且安全的加密算法 我需要能够恢复初始消息 你有什么建议 感谢您的帮助 如果需要非对称加密 请使用 2048 位 RSA 如果您可以使用对称加密 请使用 256 位 AES MSDN 参考 系统 安全 密码学
  • 自动调整用户表单大小

    目标是一个可以自动调整大小以显示所有可见控件但没有额外死区的用户窗体 顶部始终可见 3 个组合框 但在其下方是 26 个标签及其关联的 5 个选项按钮 复选框 这 26 行将全部开始隐藏 并且仅在特定条件下可见 三个组合框中的第一个将说明
  • 如何使用 DataTemplates 通过 ViewModel-First 方法缓存动态切换的视图

    我在用GalaSoft MvvmLight框架 我的一些看法MainWindow xaml我通过用户选择在运行时动态地在它们之间切换 这些视图使用以下技术与其相应的视图模型绑定 主窗口 xaml
  • 如何将存储库镜像同步到新的上游存储库

    我有一个仓库镜像服务器 myrepo 最初是为了镜像而创建的 与远程同步 repoA 也就是说 我使用类似以下的内容来创建它 cd myrepo repo init u git repoA server manifest git mirro
  • RedHat Enterprise Linux 5.3 及以上版本不正确支持 sem_timedwait?

    我们在使用 pthreadsem timedwait 的 RedHat Enterprise Linux 系统上看到了奇怪的行为 仅 5 3 及以上版本才会出现此情况 当我们使用 sem init 在后台线程上创建信号量时 不会返回错误 当
  • Xcode 错误:缺少必需的模块“Firebase”

    问题 我有一个动态框架 它使用Firebase由 cocoapods 添加 我还有应用程序 它使用这个动态框架 但是当我尝试构建项目时出现错误Missing required module Firebase 我尝试了以下方法 删除派生数据
  • 持续监控前 X 个进程的 CPU 使用率

    我希望能够每 5 秒将最高 CPU 消耗者输出到日志文件 这样我就可以在测试期间看到谁使用了最多的 cpu 我发现这个答案很常见 cpu Get Counter ComputerName localhost Process Processo