Когда я запускаю свое приложение .NET Core на сервере Linux, я получаю исключение OutOfMemoryException. Я совершенно не представляю, как я могу это отладить, потому что трассировка стека не предоставляется. Единственный вывод: «Необработанное исключение: OutOfMemoryException.»
В данный момент выбрасывается это исключение, остается достаточно места. Используется 200 ГБ ОЗУ и 300 ГБ свободно, поэтому я не думаю, что с памятью должны быть какие-либо проблемы.
В тот момент, когда это происходит, я пытаюсь сериализовать объект в protobuf. Окончательный файл должен быть около 1 ГБ. У меня никогда не было этой проблемы прежде, и модели сериализовались довольно хорошо.
Я был бы очень благодарен за любое понимание. Мне действительно нужно, чтобы это работало :( Я уже пытался вызвать это прямо перед сериализацией, потому что я думал, что проблема была с фрагментацией. После 10 часов вычислений я понял, что это не так.
_logger.LogDebug("LOH compaction start");
GCSettings.LargeObjectHeapCompactionMode =
GCLargeObjectHeapCompactionMode.CompactOnce;
GC.Collect();
_logger.LogDebug("LOH compaction end");
Код, который яя выполняю, когда генерируется исключение, это:
public static void Serialize<T>(this ProtobufSerializer protobufSerializer, string filePath, T serializationObject)
{
using (var fileStream = new FileStream(filePath, FileMode.Create))
{
protobufSerializer.Serialize(fileStream, serializationObject);
}
}