【问题标题】:Avoid Mono Cryptic GC Error Messsage避免 Mono Cryptic GC 错误消息
【发布时间】:2014-02-23 16:19:02
【问题描述】:

我目前正在单声道 (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 并获得更多内存。

有谁知道如何解决这个问题?

【问题讨论】:

    标签: c# macos mono garbage-collection


    【解决方案1】:

    如果您使用的是 mono 2.10.8 或更高版本,您可以尝试使用更高级的 sgen 垃圾收集器执行 mono 应用程序,它不像默认 GC 那样保守。

    它解决了我遇到的一些内存泄漏问题,也许您遇到了相关问题。

    要使用 sgen 运行,您必须确保安装了 mono-runtime-sgen,然后在执行程序时使用以下命令行参数:

    mono --gc=sgen YourProgram.exe

    【讨论】:

    • 谢谢!不幸的是,我有一些只出现在 Boehm 中的问题,很少出现在 SGEN 中(例如bugzilla.xamarin.com/show_bug.cgi?id=25069),我现在回到了 boehm,因为我至少已经开发了一些解决方法
    猜你喜欢
    • 1970-01-01
    • 2012-04-11
    • 2018-04-10
    • 1970-01-01
    • 2018-06-03
    • 1970-01-01
    • 2021-04-27
    • 2014-09-14
    • 1970-01-01
    相关资源
    最近更新 更多