假设您有一个用 C# 编写的应用程序(单进程)
默认情况下,应用程序分配巨大的虚拟内存,远远超过其需要(例如驻留内存约为 10mb,而虚拟内存约为几 GB)。
在 Java 中,可以使用一个选项来限制这一点:java -mx128m
如何对 .net / mono 应用程序执行相同操作?还有一个额外的问题:是否可以强制/更改 GC 选项以始终保持尽可能低的内存使用量(尽快收集,而不是在系统内存不足时收集)
基本上我的目标是创建一个内存占用最小的 .net 应用程序
编辑:为了使其更清楚,我插入了这个场景,因为几乎每个 .net 应用程序似乎都有类似的问题:
我运行一个 monodevelop,它是 mono 下的 c# 应用程序 - 它会吃东西1800MB 的虚拟内存,虽然它只使用291 MB常驻记忆。这意味着该应用程序仅使用了不到 300MB 的内存,但出于未知原因却要求使用 1800MB。这就是我想要发现的原因以及如何防止它这样做的方法。
对于大多数用户来说这可能不是问题,但对于在 SGE 等集群上运行的应用程序来说,当任务受到虚拟内存限制时,这可能会出现问题。
Mono 有几个用于设置内存上限的标志,如 java.lang.例如,当我运行集群作业时,我设置了以下环境变量。
setenv MONO_GC_PARAMS 最大堆大小=8G
您可以在此处查看此问题的更多可用选项:
Mono GC max-heap-size 没有记录。在生产中使用安全吗? https://stackoverflow.com/questions/19362898/mono-gc-max-heap-size-isnt-documented-is-it-safe-to-use-in-production
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)