Mono: слишком много разделов кучи Увеличьте MAXHINCR или MAX_HEAP_SECTS, когда приложение занимает более 4 ГБ в памяти - PullRequest
4 голосов
/ 30 августа 2011

Я запускаю свое моно-приложение на bitnami linux с 8 ГБ памяти.Это сложное приложение для слияния файлов, которое, как предполагается, требует много оперативной памяти.Но каждый раз, когда требуется более 4 ГБ ОЗУ, происходит сбой со следующим сообщением об ошибке:

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)

Что мне делать, чтобыбыть в состоянии запускать приложения с интенсивным использованием памяти на моно?

* ОБНОВЛЕНИЕ Я испортил и скомпилировал приложение для 32-битных систем.Отсюда и эта ошибка.

Ответы [ 2 ]

2 голосов
/ 04 февраля 2012

Насколько я понимаю, эта ошибка проистекает из Boehm GC.

Попробуйте сначала.Скачайте и соберите из исходного кода, используя скрипт ниже.В части настройки скрипта внесите следующие изменения:

. / Configure --with-large-heap = yes

Сделайте это в дополнение к любым другим проблемам конфигурации, которые вы хотите установить.Это должно установить флаг LARGE_CONFIG.

Если вы хотите установить его вручную (я не знаю почему), вот шаги:

  1. Загрузите источник моно и запуститескрипт здесь

http://www.integratedwebsystems.com/2011/08/install-mono-2-10-3-on-ubuntu-using-bash-script/

  1. Теперь вернитесь назад и добавьте следующий код в начало

build / mono-2.10.8 / libgc / include / gc_config_macros.h

#ifndef LARGE_CONFIG
#define LARGE_CONFIG
#endif
  1. Теперь перейдите к сборке / mono-2.10.8 и выполните

make sudo make install

Надеюсь, это скомпилирует новый моно, которое решит вашу проблему.Полученный моно будет в / opt

Часть наиболее уязвимого кода находится в libgc / include / private / gc_priv.h, но сопровождающие прекрасно поместили условные выражения для флага LARGE_CONFIG, так что, вероятно, лучше всегоработать с этим.

2 голосов
/ 31 августа 2011

Использовать моно 2.10.2 или новее (возможно, с новым GC с опцией --gc = sgen).Ваша моно версия очень старая.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...