【问题标题】:How to Get Per Process Disk Activity in Windows如何在 Windows 中获取每个进程的磁盘活动
【发布时间】:2014-02-25 17:38:38
【问题描述】:

我需要提取给定进程的磁盘统计信息,我可以获取列出的进程并使用 WMI 和 PerformanceCounters 获取列出的 CPU 和内存等总体信息。但是信息都是捆绑在一起的,有没有办法在每个进程中提取这些数据。有点像在 Windows 资源监视器中?

提前致谢

【问题讨论】:

  • 不确定这是否有用,但可以尝试一下; msdn.microsoft.com/en-us/library/2fh4x1xb%28vs.71%29.aspx
  • 它是性能计数器——你应该很容易获得整体 IO 速率(即磁盘 + 网络 + 驱动程序 IO)。我没有办法将它分成不同的类别 - 我会冒险猜测与进程资源管理器中使用的方法相同,因此至少需要一些努力。
  • 虽然读得更多,但很可能是 Windows Performance Analyzer (WPA) 使用 EVENT_TRACE_FLAG_DISK_IOEVENT_TRACE_FLAG_DISK_FILE_IO 并将 IssuingThreadId 映射回请求它的进程。
  • @Petesh 我可以挑出磁盘 IO 速率。我遇到的麻烦是在每个系统进程中获取这些数据速率。我也在研究 WPA,谢谢...
  • @MartijnHols 非常感谢...但是数据仍然是磁盘的整体读取..

标签: c# performance monitoring


【解决方案1】:

如果你需要实时数据,你应该实现 ETW 监听器。

ETW 是 Windows 中跟踪性能信息的方式。它支持回 Windows 2000。

Windows 中的每个组件都报告 ETW 事件(如果有侦听器在等待数据)。

例如,磁盘信息、内存(消耗、页面错误等)、争用、CPU 使用率(每个内核、每个线程、每个应用程序,甚至对磁盘或网络的单个 IO 请求。 驱动程序使用它,.NET CLR 使用它(获取 JIT 或 GC 统计信息),示例不胜枚举。

我建议您从下载 XPerf\Xperf 视图或 Windows Performance Recorder + Analyzer、PerfView 开始,尝试查看您要查找的确切信息,然后开始创建托管 ETW 侦听器。

您可以从这个blog post 开始,或搜索 Vans Morison(负责 MS 中托管的 ETW 提供者和消费者)的 ETW 帖子。

希望这会有所帮助, 奥菲尔。

【讨论】:

  • 非常感谢我能够通过 WPA 提取一些数据。几个月前我完成了一个仅限 Windows 的解决方案,我正试图使该解决方案更具跨平台性。我会尝试在上面使用这个方法。
猜你喜欢
  • 2010-12-11
  • 1970-01-01
  • 2022-12-17
  • 2020-12-25
  • 2011-02-07
  • 2017-12-06
  • 2012-04-06
  • 2013-11-22
  • 2010-09-09
相关资源
最近更新 更多