【问题标题】:Monitoring AppDomain resources and setting thresholds监控 AppDomain 资源并设置阈值
【发布时间】:2011-02-17 06:58:21
【问题描述】:
我的公司托管由第三方创作的组件。每个组件都托管在自己的 AppDomain 中,但可能与其他组件共享一个服务器。最近,我认为有一个或多个写得不好的组件行为不端并且消耗了太多资源,导致服务器崩溃。我希望能够:
确定哪个组件是有罪的一方,或者换句话说,确定每个组件的 appdomain 正在使用多少资源(内存、操作系统句柄、CPU 周期等)。
-
在 appdomains 上设置阈值,这样即使一个组件确实发疯了,它可以消耗的资源也是有限的,并且它应该不会影响同一服务器上其他组件的性能。
李>
有人有什么想法吗?
【问题讨论】:
标签:
.net
appdomain
instrumentation
【解决方案1】:
虽然这不是我问题的完整答案,但它确实满足了我的大部分要求。
此后我发现了 AppDomain 对象 (http://msdn.microsoft.com/en-us/library/z9744cf9.aspx) 的 MonitoringIsEnabled、MonitoringSurvivedMemorySize、MonitoringSurvivedProcessMemorySize、MonitoringTotalAllocatedMemorySize 和 MonitoringTotalProcessorTime 属性,它们满足了我上面 1 中的一些要求。但我仍然想知道操作系统句柄,如果可能的话,可以设置阈值。这可行吗?
如果无法设置资源使用阈值,我想我可以改为使用上述属性持续监控域,并在检测到它超过一定数量的内存或 CPU 时间时卸载它。