【发布时间】:2015-04-09 22:03:08
【问题描述】:
作为一名开发人员,我想监控 TaskScheduler 中任务队列中工作的大小(和进度),以便我可以评估在生产负载下经历的减速是否是由于计划任务的量级或延迟造成的.
通常我会简单地附加调试器并检查任务大小,但是:
- 该应用程序在 Mono 下运行并处于生产状态,因此我无法使用 Visual Studio 附加到它
- 我想提供对此数据的分析输出,作为服务健康监测的监测输入
我已经通过文档找到了
- TaskScheduler.GetScheduledTasks,它将此信息传递给调试器。它受到保护(我可以规避),但似乎也需要一些关于我无法兑现的冻结线程的保证。但是,我愿意使用不一致的数据。
- how to get a list of running tasks in .net 4.0。它侧重于 running 任务,这对我来说不是那么有趣。我对积压的大小以及工作是否正在进行中感兴趣。
我愿意:
- 使用为其他目的(例如调试器)设计的代码
- 接受我得到不一致的数据(这是为了统计和分析)
我不想想做的事情是:
- 为每个创建的任务添加跟踪。
- 部分代码是第 3 方的,无法重构
- 有很多代码,将其注入其中比不知道它的进展情况更糟糕。
- 使用自定义任务调度器
- 部分代码是第 3 方的,无法重构
- 一些代码使用了TaskScheduler,它设置了线程优先级和最大并发。考虑到监控方面会很糟糕。
【问题讨论】:
标签: .net task-parallel-library task monitoring