我目前正在单声道 (Mac OSX) 中运行一个程序,它读取一个非常大的数据文件并在聚合后创建汇总统计信息。
奇怪的是,我在程序中的某个时刻收到以下错误消息:Garbage collector could not allocate 16384 bytes of memory for major heap section
我希望有一个 OOM 异常,或者我可以使用的其他东西。我尝试使用以下方法增加最大堆大小:export MONO_GC_PARAMS=max-heap-size=4g
但是,它最终告诉我我需要将它设置为一个整数,尝试手动输入带有适当零的值会导致在执行开始时发生 gdb 转储。
令我烦恼的是,我认为在代码的这一特定部分中断时,机器上有 16384 字节可用,我认为它应该能够很好地进行 GC 并获得更多内存。
有谁知道如何解决这一问题?
最佳答案
如果您使用的是 mono 2.10.8 或更高版本,您可以尝试使用更高级的 sgen 垃圾收集器执行 mono 应用程序,该垃圾收集器不像默认 GC 那样保守。
它解决了我遇到的一些内存泄漏问题,也许您遇到了相关问题。
要使用 sgen 运行,您必须确保安装了 mono-runtime-sgen,然后在执行程序时使用以下命令行参数:
单声道 --gc=sgen YourProgram.exe
关于c# - 避免 Mono Cryptic GC 错误消息,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21970852/