如何在 24 小时内监控 Windows Server 2012 上的 CPU 使用率和进程?

如何在 24 小时内监控 Windows Server 2012 上的 CPU 使用率和进程?

我们有一个长时间运行的高性能操作,运行了 6 个小时。上次运行时,半夜发生了一些事情,持续了 5 分钟,性能急剧下降,并导致几次超时。我怀疑是其他进程启动并重击了 CPU 或类似情况。

经过搜索,这个网站上的建议是使用 ProcessMonitor 来监控 CPU。但是,它似乎只能在运行时捕获流量,而且它是一个桌面应用程序。我的 Windows 服务器实例在空闲 10 分钟后会将您踢出,由组策略控制,我无法更改它,所以我不能使用桌面应用程序进行监控。

我需要监控 24 小时内的 CPU 使用率。我只对进程名称和 CPU 使用率 (%) 感兴趣,这样我就可以找出到底是什么在起作用,并破坏了系统。

因为你被踢出去了,所以我确实需要一些可以作为 Windows 服务运行的东西。

有没有什么办法可以做到这一点(使用 ProcessMonitor 或类似的工具 - Windows 服务器肯定内置了一些东西?)作为服务,这样我就不需要登录到远程桌面,还是我必须找到某种鼠标移动脚本并让我的电脑整晚开着?

编辑:

性能监视器看起来很有前途。很难找到如何配置它来满足我的需要。

我制作了一个自定义数据收集器 cpu 和进程 ID:

在此处输入图片描述

我想要做的是能够看到特定时间每个进程的 CPU 使用情况,就像您在任务管理器中所做的那样,但还可以使用图表并查看监控期间任何时间点的快照。

所以我可以看到 24 小时的图表,看到出现峰值的点,单击它,然后查看是哪个过程导致了它。

我甚至不相信我的上述配置,如果我让它工作的话,会告诉我进程名称,它会说进程ID,如果结果是guid或类似的,那可能也没有帮助,特别是如果进程启动和停止并且当我去调查时没有仍在运行。

答案1

Windows Server 有一个内置工具,可以实时显示性能数据或收集日志中的数据以供日后查看。我认为这正好满足您的需求。

性能监视器的屏幕截图

本文有关使用性能监视器在 Windows Server 2012 R2 上进行日志记录的基本教程。

这篇优秀的文章所有可用于检查 Windows 性能的工具(主要是交互式工具)。

答案2

使用 Daniel K 的性能监视器的建议,我找到了如何做到这一点。

  • 加载性能监视器
  • 转至‘数据收集器集’
  • 展开“用户定义”
  • 创建一个新的“数据集”
  • 选择手动创建(高级),注意如果不删除则无法更改名称,因此现在请使其合理
  • 按下一步,选择“创建数据日志”和“性能计数器”
  • 按下一步,按添加。
  • 左上角,展开“进程”,单击“%处理器时间”以及您可能需要的任何其他内容。
  • 左下角,点击“”
  • 点击“添加 >>”按钮并按确定
  • 选择合适的采样间隔,然后继续按“下一步”直至到达向导的结束。
  • 您可以通过右键单击数据收集器集并按“开始”来开始收集,或者转到其属性并设置计划。我发现我的数据收集器在没有设置停止条件的情况下在 30 分钟后停止工作,但这可能是一个异常。
  • 数据收集完成后,展开“报告”>“用户定义”>“您的数据集”
  • 双击打开它。
  • 请注意,底部显示“% 处理器时间”,实例为“_Total”。默认情况下,它显示总 CPU 使用率。这包括“空闲时间”,因此它将始终在 100% 左右。
  • 单击图表上方顶部栏上的绿色 + 按钮(不在顶部窗口中)
  • 单击左上角的“进程”,然后在底部您可以选择要查看的单个进程,或者选择“”并按添加。
  • 单击“确定”,您将看到每个进程的 CPU 使用率的详细图表。

答案3

如果 Windows 性能计数器对您不起作用(实际上,它们有一些令人讨厌的限制),您可以使用专用的指标收集和可视化解决方案。这可能有点过头了,但也许仍然是您工具包的一个有价值的补充。

我可以推荐使用 Prometheus 作为这种情况下的指标解决方案。

  1. 普罗米修斯是存储数据的数据库。将其安装在某台机器上(可以与您正在监控的机器相同)。最简单的安装选项可能是 Linux 上的 Docker 容器,但对于短暂的一次性使用,您可以将其作为 exe 运行。它有一个用于查询数据的 Web GUI。
  2. wmi_导出器是数据收集代理。安装它并确保启用每个进程的指标在安装时(您需要提供相关参数)。
  3. 在 Prometheus 配置文件中将 wmi_exporter 定义为目标。这将使 Prometheus 从导出器中提取数据(我相信默认间隔是每 60 秒)。

接下来是最难的部分。Prometheus 是一个数据库 - 你可以使用 Web GUI 查询原始数据,但 GUI 不太用户友好,如果你不习惯处理时间序列数据,PromQL 查询语言可能不直观。我建议从查询irate(wmi_process_cpu_time_total[5m])开始。这将为你提供每个进程每秒实时 CPU 时间的图表。

irate将为您提供最后两个数据点之间的数据。如果您想要平滑平均值,rate请使用将用作5m平均周期(irate仅将其用作最大限制)。

Prometheus 是一个功能强大的指标系统,需要花些功夫才能理解。但是,从长远来看,它可以很好地帮助您使自动化系统可观察。

附注:Prometheus 通常部署在格拉法纳作为可视化 GUI(取代基本的 Prometheus 内置 GUI)。但是,如果只是进行一些快速故障排除,则不需要它。

附注。流程输出者node_exporter是 Linux 中与 WMI 导出器相同的版本。

相关内容