AppDomain 的 CPU 和内存上限

Posted

技术标签:

【中文标题】AppDomain 的 CPU 和内存上限【英文标题】:CPU and Memory Cap for an AppDomain 【发布时间】:2010-09-15 12:02:38 【问题描述】:

我想在 appdomain 中托管一个 exe,并为其分配 CPU 和内存上限,这样它就不会使用超过分配的处理能力。这可能吗?如何做?

【问题讨论】:

【参考方案1】:

据我所知,您不能直接限制最大内存。

但是,从 .NET 4 开始,如果 AppDomain.MonitoringIsEnabled 设置为 true,则当前由 AppDomain 分配的内存在 AppDomain.MonitoringSurvivedMemorySize 属性中可用。您可以启动一个看门狗线程来监控分配情况。

【讨论】:

【参考方案2】:

.NET 4.0 中似乎有针对此要求的解决方案

http://www.c-sharpcorner.com/UploadFile/hasansheik/diagnostic-and-performance-monitoring-in-dotnet-4-0/

【讨论】:

请详细说明您的答案,以防链接失效。 此链接指向只读属性。问题是如何设置这些值。【参考方案3】:

即使是 Windows 性能监视器也不允许您查看 AppDomain 的 CPU 使用情况 - 因为 AppDomain 是 CLR 的逻辑结构,操作系统不知道唯一的 CPU 使用情况跟踪是在进程级别 - 如果我会感到震惊有一种方法可以限制您甚至无法监控的内容。

您想要这样做的具体原因是什么?为什么您不希望您的应用程序使用所有可用的资源?如果只是为了确保有足够的开销供其他进程运行,难道你不能将线程的优先级设置得非常低,然后让 Windows 调度程序来解决吗?

【讨论】:

【参考方案4】:

我知道做这种事情的唯一方法是使用 HyperV(或类似产品)并将您的应用程序分区到不同的虚拟机中。但这并不是一个便宜或简单的解决方案。

【讨论】:

以上是关于AppDomain 的 CPU 和内存上限的主要内容,如果未能解决你的问题,请参考以下文章

AppDomain 是不是在自己的线程中执行?

虚拟内存和地址空间

k8s容器的资源限制

Docker之Linux Cgroup实践

.NET 进程和 AppDomain 在啥情况下会共享内存中加载的程序集?

传递给已卸载 AppDomain 的服务的内存泄漏