如何使用 PowerShell 监控进程的 CPU 使用率?

2024-02-20

我正在尝试编写一个 PowerShell 脚本来监视 SQL Server 进程的 CPU 利用率百分比。我想每天记录这个数字的快照,以便我们可以随着时间的推移对其进行监控并观察趋势。

我的在线研究表明这个 WMI 查询应该给我我想要的东西:

Get-WmiObject -Query "SELECT PercentProcessorTime FROM win32_PerfFormattedData_PerfProc_Process WHERE Name='SqlServr'"

When I run the WMI query I usually get a value somewhere between 30-50% enter image description here

However, when I watch the process in Resource Monitor it usually averages at less than 1% CPU usage SQL Server Average CPU Utilization

我知道 WMI 查询只是返回 CPU 使用情况的快照,而不是很长一段时间内的平均值,因此我知道两者不能直接比较。即便如此,我认为快照通常应该小于 1%,因为资源监视器平均值小于 1%。

有人知道为什么会有如此大的差异吗?如何准确测量进程的 CPU 使用率?


在过去的几天里我学到了有关 WMI 和性能计数器的所有知识。

WMI 代表 Windows 管理规范。 WMI 是向 WMI 系统和 Windows COM 子系统注册的类的集合。这些类称为提供程序,并且具有任意数量的公共属性,这些属性在查询时返回动态数据。

Windows 预装了大量 WMI 提供程序,可为您提供有关 Windows 环境的信息。对于这个问题我们关心的是Win32_PerfRawData* 提供程序 http://msdn.microsoft.com/en-us/library/windows/desktop/aa394084%28v=vs.85%29.aspx以及基于它构建的两个包装器。

如果您直接查询任何 Win32_PerfRawData* 提供程序,您会发现它返回的数字看起来很可怕。这是因为这些提供商提供了原始数据,您可以使用它们来计算您想要的任何内容。

为了更轻松地使用 Win32_PerfRawData* 提供程序,Microsoft 提供了两个包装器,它们在查询时返回更好的答案:PerfMon 和 Win32_PerfFormattedData* 提供程序。

好的,那么我们如何获取进程的 CPU 利用率百分比呢?我们有三个选择:

  1. 从 Win32_PerfFormattedData_PerfProc_Process 提供程序获取格式良好的数字
  2. 从 PerfMon 获取格式良好的数字
  3. 使用 Win32_PerfRawData_PerfProc_Process 计算我们自己的 CPU 利用率百分比

我们将看到选项 1 存在一个错误,因此它并不在所有情况下都有效,尽管这是互联网上通常给出的答案。

如果您想从 Win32_PerfFormattedData_PerfProc_Process 获取此值,您可以使用问题中提到的查询。这将为您提供该进程的所有线程的 PercentProcessorTime 值的总和。问题是,如果有超过 1 个核心,则该总和可能 >100,但该属性的最大值为 100。因此,只要该进程的所有线程的总和小于 100,您就可以通过除以该进程的线程数来得到答案PercentProcessorTime 属性由机器的核心数决定。

如果您想从 PowerShell 中的 PerfMon 获取此值,您可以使用Get-Counter "\Process(SqlServr)\% Processor Time"。这将返回 0 - (CoreCount * 100) 之间的数字。

如果您想自己计算该值,Win32_PerfRawData_PerfProc_Process 提供程序上的 PercentProcessorTime 属性将返回该进程已使用的 CPU 时间。因此,您需要拍摄两个快照,我们将它们称为 s1 和 s2。然后我们将执行 (s2.PercentProcessorTime - s1.PercentProcessorTime) / (s2.TimeStamp_Sys100NS - s1.TimeStamp_Sys100NS)。

这就是最终的结论。希望对您有帮助。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 PowerShell 监控进程的 CPU 使用率? 的相关文章

随机推荐

  • 获取当前片段并保存 onSaveInstanceState() 方法以实现屏幕方向

    我有一个包含多个片段的活动 我还使用 actionbarSherlock 作为我的选项卡 它也连接到片段 我的问题是当我要旋转屏幕 即从纵向到横向 反之亦然 时 我的活动将再次被调用 因此它会重新启动我的活动 我不想重新启动我的活动 而只是
  • 为所有齐射请求设置自定义标头

    重写 getHeaders 可以在必要时向请求添加自定义标头 但是如果总是需要设置 X 标头怎么办 例如静态身份验证令牌 JsonObjectRequest req new JsonObjectRequest URL new JSONObj
  • postgresql 9.2 中 varchar(n) 的最大长度是多少?最好使用 varchar(n) 或 text?

    您好 我正在使用 postgresql 9 2 我想使用 varchar n 来存储一些长字符串 但我不知道 varchar n 支持的最大字符长度 哪一个更好用 你能给我推荐一下吗 谢谢 tl dr 1 GB 每个字符 实际上 代码点 可
  • C++0x 标准如何定义 C++ Auto 多重声明?

    嗯 我对即将推出的 C 0x 标准中的多个自动声明有点困惑 auto a 10 b 3 f c new Class 我在某处读到这是不允许的 原因是 因为不清楚连续声明是否应该与第一个声明具有相同的类型 示例中为 int 可能的翻译1 in
  • 在 Julia 中将类型参数引用为函数参数

    我正在尝试在 Julia 中创建 integer mod p 类型 我确信已经有一个包用于此 这只是个人练习 type Intp p v Int8 end function add a Intp p b Intp p return Intp
  • 蚂蚁串比较

    我在 ant 中有一个脚本 我需要按字典顺序比较 2 个字符串 就像是 1 2 3 compareTo 1 2 4 我找不到办法这样做 有什么想法吗 我正在使用 ant 1 8 和 ant contrib Thanks 为了使此解决方案发挥
  • 如何提高System.currentTimeMillis()粒度?

    如何在不提供非常大的数组作为输入的情况下实现它 我正在测量不同算法的运行时间 对于 20 个元素的数组 我得到非常 相同 相似的值 我尝试将总时间除以 1000000000 来清除E然后使用了 16 个镜像 我复制了输入数组并为镜像再次执行
  • 带摄像头预览的 SurfaceView 不会被破坏

    我有一个带有 2 个选项卡 活动 的选项卡活动 每个选项卡都有一个绘制在带有相机预览的 SurfaceView 顶部的 3d Open GL 场景 然而 根据设备方向 选项卡正在切换 问题是 当另一个活动启动时 它调用camera open
  • AttributeError:模块“numpy”没有属性“flip”

    错误信息 AttributeError 模块 numpy 没有属性 flip 我不明白为什么它会给我这个错误 我用谷歌搜索并确保我已经更新到最新版本的 numpy 我的工作目录中肯定没有另一个名为 numpy 的文件 任何帮助将不胜感激 n
  • r 为 ggplot2 安装色彩空间时出错

    我是 r 新手 希望能得到一些安装 ggplot2 的帮助 我使用的是 RStudio 版本 0 98 1102 请参阅下面的错误 install packages ggplot2 运行良好 library ggplot2 loadName
  • 如何从 Angular 2 Material Design 中设置 md-select 组件的默认值?

    我有以下选择组件 它是从来自 REST API 的数据填充的 如何在 md select 上设置默认选择值
  • 显示:内联块额外边距[重复]

    这个问题在这里已经有答案了 我正在和几个人一起工作div被设置为display inline block并有一套height and width 在 HTML 中 如果每个后面有一个换行符divdiv 的右侧和底部会自动添加 5 像素边距
  • Chrome 浏览器中的 Angular 多行网格性能

    我需要制作一个组件 其中包含一个包含大量行的表 所有这些都适用于小数据 但如果项目数增长到 2000 或更多 它就会变得滞后 滚动 尤其是动画变得太慢 我也尝试过设置trackBy函数为ngFor但在这种情况下它对性能没有影响 请参见堆栈闪
  • Azure Active Directory 使用默认模板为tenantId 传递空GUID

    我已经对几个拥有 Azure AAD 帐户的 MS 帐户进行了尝试 并尝试使用 Visual Studio 2015 和 2017 但遇到了完全相同的错误 错误 使用默认的 ASP NET MVC 模板与开箱即用的 AAD 集成 根本没有代
  • 阻止浏览器自动填写表单用户名和密码字段

    在Chrome浏览器中 我已经保存了用户名和密码 现在 如果我导航到其他表单 并且它包含其他内容的用户名和密码 我保存的表单将自动填充到此处 我怎样才能阻止这个 When autocomplete off不会阻止填写凭据 请使用以下内容 修
  • 是否可以粘贴溢出的 HTML 元素?

    CSS 元素position sticky大多数现代网络浏览器都支持 但一些仍然常用的浏览器 特别是 IE11 不支持它 为了解决这个问题 有各种 JavaScript 解决方案 例如 Stickyfill 和 Stickybits 然而
  • RESTful URL 设计:公共 API 与私有 API、分层 API 设计模式、URI 与 URL 设计?

    我经常遇到这样的问题 与此非常相似分层 RESTful URL 设计 https stackoverflow com questions 7833548 hierarchical restful url design rq 1 假设该服务仅
  • 从现有 DataFrame 构建一个新的 DataFrame,其中一列包含列表(使用列表填充新行)

    我有一个像这样的数据框 df pd DataFrame name toto tata tati choices 0 df choices df choices astype object df choices 0 1 2 3 df choi
  • 带有自定义类的 Pickle

    假设我在文件 myClass py 中有一个简单的 python 类定义 class Test A 我还有两个测试脚本 第一个脚本创建一个 Test 类型的对象 填充数组 A 并将结果腌制到文件中 它立即从文件中取消它 并且数组仍然填充 第
  • 如何使用 PowerShell 监控进程的 CPU 使用率?

    我正在尝试编写一个 PowerShell 脚本来监视 SQL Server 进程的 CPU 利用率百分比 我想每天记录这个数字的快照 以便我们可以随着时间的推移对其进行监控并观察趋势 我的在线研究表明这个 WMI 查询应该给我我想要的东西