当应用程序占用超过4 GB的内存时,增加MAXHINCR或MAX_HEAP_SECTS
本文关键字:MAXHINCR 增加 MAX SECTS HEAP 内存 应用程序 GB | 更新日期: 2023-09-27 18:06:59
我在bitnami linux上运行我的mono应用程序,内存为8 GB。它是一个复杂的文件合并应用程序,在工作时应该占用大量RAM。但每次它占用超过4gb的内存时,它就会崩溃,并出现以下错误信息:
Too many heap sections: Increase MAXHINCR or MAX_HEAP_SECTS
Stacktrace:
at (wrapper managed-to-native) object.__icall_wrapper_mono_array_new_specific (intptr,int) <0x0005e>
at (wrapper managed-to-native) object.__icall_wrapper_mono_array_new_specific (intptr,int) <0x0005e>
at System.Collections.Generic.Dictionary`2<string, System.Nullable`1<int>>.InitArrays (int) <0x00040>
at System.Collections.Generic.Dictionary`2<string, System.Nullable`1<int>>.Init (int,System.Collections.Generic.IEqualityComparer`1<string>) <0x00091>
at System.Collections.Generic.Dictionary`2<string, System.Nullable`1<int>>..ctor () <0x0001b>
at lawyerGatherBot.Merger.LawyerRepresentation..ctor (string) <0x00080>
at lawyerGatherBot.Merger.MergeLawyerRecords.Map (System.Collections.Generic.IEnumerable`1<string>) <0x00167>
at lawyerGatherBot.Program.Main (string[]) <0x00161>
at (wrapper runtime-invoke) <Module>.runtime_invoke_void_object (object,intptr,intptr,intptr) <0x00082>
Native stacktrace:
mono() [0x48bd6b]
/lib/libpthread.so.0(+0xf8f0) [0x7f6c4198a8f0]
/lib/libc.so.6(gsignal+0x35) [0x7f6c4162ba75]
/lib/libc.so.6(abort+0x180) [0x7f6c4162f5c0]
mono() [0x5da188]
mono() [0x5d7ec0]
mono() [0x5d8349]
mono() [0x5d8534]
mono() [0x5d86f1]
mono() [0x5d3571]
mono() [0x5d4752]
mono() [0x5d50e5]
mono(mono_array_new_specific+0xba) [0x53716a]
[0x40df9f2f]
Debug info from gdb:
=================================================================
Got a SIGABRT while executing native code. This usually indicates
a fatal error in the mono runtime or one of the native libraries
used by your application.
=================================================================
Aborted
下面是mono -V的输出:
Mono JIT compiler version 2.8.2 (tarball Tue Aug 30 18:06:04 UTC 2011)
Copyright (C) 2002-2010 Novell, Inc and Contributors. www.mono-project.com
TLS: __thread
SIGSEGV: altstack
Notifications: epoll
Architecture: amd64
Disabled: none
Misc: debugger softdebug
LLVM: supported, not enabled.
GC: Included Boehm (with typed GC and Parallel Mark)
我应该怎么做才能在mono上运行内存密集型应用程序?
*更新我搞砸了,编译了32位系统的应用程序。因此,出现了这个错误。
我的理解是这个错误源于Boehm GC。
先试试这个。使用下面的脚本从源代码下载并构建。在脚本的configure部分,做如下修改:
。/configure——with-large-heap = yes
除了您想要设置的任何其他配置问题之外,还可以执行此操作。这应该设置LARGE_CONFIG标志。
如果你想手动设置(我不知道为什么),下面是步骤:
- 下载单声道源代码并在这里运行脚本
- 现在返回并将以下代码添加到顶部
构建/mono-2.10.8/libgc/include/gc_config_macros.h
#ifndef LARGE_CONFIG
#define LARGE_CONFIG
#endif
- 现在去构建/mono-2.10.8并运行
使Sudo make install
希望这将编译一个新的mono来解决你的问题。生成的单声道将位于/opt 中。一些最受影响的代码在libgc/include/private/gc_private .h中,但是维护者已经很好地为LARGE_CONFIG标志添加了条件,所以最好使用它。
使用mono 2.10.2或更高版本(可能使用带有选项——GC =sgen的新GC)。你的单声道版本太旧了